• ベストアンサー

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

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

  • ベストアンサー
noname#4564
noname#4564
回答No.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

nenoneno
質問者

お礼

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

その他の回答 (1)

  • aptiva
  • ベストアンサー率36% (193/529)
回答No.1

>Dim dtmNext, dtmTo, dtmTmp As Date ここがあやしいのではないでしょうか。 dtmNext、dtmToはVariant型、dtmTmpが日付型で宣言されてます。 Dim dtmNext As Date, dtmTo As Date, dtmTmp As Date とやってみてはいかがでしょう。

nenoneno
質問者

お礼

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