• ベストアンサー

日付型変数の演算

VBの時間演算に関する基本的質問なのですが、 日付型変数dt,AdtBの値を dtA="01:00:00" dtB="00:00:30" とし、加算して"01:00:30"を得たいのですが、単純に dtC=dtA+dtB では、型が一致しませんというエラーになってしまします。 何かの関数を使うのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • dsuekichi
  • ベストアンサー率64% (171/265)
回答No.2

対応方法はANo.1さんが、答えていますので省略しますが、 別の気になる点があります。 VBのバージョンは何なんでしょう? 以下はVB6の前提での話です。 > 日付型変数dt,AdtBの値 とありますが、ちゃんと「日付型変数」になっていたら、 > dtC=dtA+dtB は、「型が一致しません」というエラーにはならないと思います。 ひょとして、変数宣言を > Dim dtA, dtB, dtC As Date の様にしていませんか? もしそうなら、日付型になるのは、dtCだけで、dtAとdtBは型宣言無し(結果的にVariant型)です。 そうすると、 > dtA="01:00:00" は、単なる「文字列の代入」で「日付型」とは看做されません。 そのため、 > dtC=dtA+dtB の「+」は、文字列「dtA」と文字列「dtB」の連結(文字列を単に繋げる)の意味になり、 > dtC="01:00:0000:00:30" 言う式になり、日付型に変換できないので「型が一致しません」となってしまいます。 複数の変数を1行で型宣言する場合は、 > Dim dtA As Date, dtB As Date, dtC As Date の様に、1つづつ型を指定しなければいけません。 #ちなみに、VB.NET以降は、データ型の考え方が変わったので、 #この話は当てはまりません。 余談かもしれませんが、念の為。

MusaGoro
質問者

お礼

dsuekichi様 ご指摘の通り、 Dim dtA, dtB, dtC As Date と宣言しておりました。実はこれまでずっとこのようにAsは行の最後にしか記述してきませんでした。 基本が抜けていたようで、大変勉強になりました。 ありがとうございました。

その他の回答 (1)

  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

  ちゃんと日付型に変換すべきでしょう。 '-------------------------------------  Private Sub Command1_Click()   Dim dtA As Date   Dim dtB As Date   Dim dtC As Date     dtA = CDate("01:00:00")     dtB = CDate("00:00:30")     dtC = dtA + dtB   MsgBox dtC End Sub '------------------------------------- 外しましたらご容赦願います。  

MusaGoro
質問者

お礼

onlyrom様 早々にご回答頂、ありがとうございます。 CDate関数で変換して、ちゃんと計算できました。 Excelでは、01:00:00のまま直接演算が出来たので、VBでもそのまま足してしましました。 ありがとうございました。

関連するQ&A