「みんな教えて! 選手権!!」開催のお知らせ

nenonenoです。こんにちわ
Windows98,VB6SP5の環境でDate型の変数dtmNext,dtmToを比較しようとしたのですが、同じはずなのに片方が大きいと判定していまいます。
datediffでしらべると0:00:00と返すので、同じだと思うのですが...
使い方が悪いのであれば、どこか指摘していただけるとありがたいです。
よろしくお願いします。m(_ _)m

Dim dtmNext, dtmTo, dtmTmp As Date

 この間にもコードがあります

Debug.Print "dtmNext:"; dtmNext; "dtmTo:"; dtmTo
If dtmNext = dtmTo Then Debug.Print "Pass2 ="
If dtmNext > dtmTo Then Debug.Print "Pass2 >"
If dtmNext < dtmTo Then Debug.Print "Pass2 <"

dtmTmp = DateDiff("n", dtmNext, dtmTo)
Debug.Print "dtmTmp:"; dtmTmp

↓---------------------------イミディエイトウインドウの表示
dtmNext:03/02/17 15:00:00 dtmTo:03/02/17 15:00:00
Pass2 >
dtmTmp:0:00:00

A 回答 (2件)

日付時刻型の内部表現は浮動小数点数です。


ご質問のケースではたぶん、1秒未満の端数部分が等しくないのでしょう。
Excel 2000で試してみましたが、小数部分で小さな差があっても、DateDiff関数では差はゼロと返されるようです。


?CDbl(#2003/02/17 15:00:00#)
37669.625

?Format$(CDate(37669.625),"yyyy/mm/dd hh:nn:ss")
2003/02/17 15:00:00

?Format$(CDate(37669.624999),"yyyy/mm/dd hh:nn:ss")
2003/02/17 15:00:00

?Format$(CDate(37669.625001),"yyyy/mm/dd hh:nn:ss")
2003/02/17 15:00:00

?CDate(37669.624999) = CDate(37669.625)
False

?DateDiff("s", CDate(37669.624999), CDate(37669.625))
0
    • good
    • 1
この回答へのお礼

そうですね。浮動小数点演算という事をすっかり忘れていました。
こちらでもテストしてみましたが、おっしゃる通りの現象となりました。
一度計算したDeta型は茣蓙が含まれていると思うべきですね。

datediff関数を使って比較するか、関数を作るかしようと思います。
テストまでして頂いて、ありがとうございました。感謝します。

お礼日時:2003/02/17 16:23

>Dim dtmNext, dtmTo, dtmTmp As Date



ここがあやしいのではないでしょうか。
dtmNext、dtmToはVariant型、dtmTmpが日付型で宣言されてます。

Dim dtmNext As Date, dtmTo As Date, dtmTmp As Date
とやってみてはいかがでしょう。
    • good
    • 0
この回答へのお礼

ご指摘いただいた内容が原因ではないようですが、今後直そうとおもいます。
早速回答いただきありがとうございます。

お礼日時:2003/02/17 16:10

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報