| 
    
     |  | こんばんは。 
 時間を表す Cdate("23:01") や Cdate("0:05") って
 
 sub test()
 MsgBox CDbl(CDate("23:01"))
 MsgBox CDbl(CDate("0:05"))
 end sub
 なんてコードで確認するとわかりますが、小数点以下の桁数が大きい小数ですよね!!
 
 PCはこういう計算が弱いんです。
 理由は、
 
 www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=46479;id=excel
 
 ↑ここと同じ理由です。
 
 WorksheetFunction.Floor(time1, CDate("0:05"))
 
 この関数って実際には
 
 Int(time1 / CDate("0:05")) * CDate("0:05")
 
 ↑こんな計算を行ってくれる関数です。
 
 小数点以下の桁数が大きい小数同士で上記のような計算を行うと
 誤差はでる可能性は大きいです。
 
 時刻を秒単位にする、つまり、整数で比較すると正しい比較が行えます
 
 '=================================================================
 Sub main()
 
 Dim time1 As Double, time2 As Double
 
 time1 = CDate("23:01") * 24 * 60 * 60
 time2 = CDate("23:00") * 24 * 60 * 60
 
 'time1 を5分単位に切り下げ
 time1 = WorksheetFunction.Floor(time1, CDate("0:05") * 24 * 60 * 60)
 
 If time1 / 86400 = time2 / 86400 Then
 Debug.Print "ok"
 Else
 Debug.Print "no"
 End If
 MsgBox Format(time1 / 86400, "hh:mm:ss")
 
 End Sub
 
 
 プログラミングでは、小数の計算は 要注意ですよ!!
 
 |  |