|
こんばんは。
時間を表す 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
プログラミングでは、小数の計算は 要注意ですよ!!
|
|