- ベストアンサー
VBでDate型の大小比較がうまく動作しないのですが
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
- みんなの回答 (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
その他の回答 (1)
- aptiva
- ベストアンサー率36% (193/529)
>Dim dtmNext, dtmTo, dtmTmp As Date ここがあやしいのではないでしょうか。 dtmNext、dtmToはVariant型、dtmTmpが日付型で宣言されてます。 Dim dtmNext As Date, dtmTo As Date, dtmTmp As Date とやってみてはいかがでしょう。
お礼
ご指摘いただいた内容が原因ではないようですが、今後直そうとおもいます。 早速回答いただきありがとうございます。
お礼
そうですね。浮動小数点演算という事をすっかり忘れていました。 こちらでもテストしてみましたが、おっしゃる通りの現象となりました。 一度計算したDeta型は茣蓙が含まれていると思うべきですね。 datediff関数を使って比較するか、関数を作るかしようと思います。 テストまでして頂いて、ありがとうございました。感謝します。