アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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以降は、データ型の考え方が変わったので、
#この話は当てはまりません。

余談かもしれませんが、念の為。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/11/25 16:24

 


ちゃんと日付型に変換すべきでしょう。

'------------------------------------- 
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
'-------------------------------------

外しましたらご容赦願います。
 
    • good
    • 0
この回答へのお礼

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

ありがとうございました。

お礼日時:2007/11/25 16:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!