時刻の処理を考えていて、1分ずつ加算するループを試してみたときのこと。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
Sub TEST1() s = TimeValue("2:00 PM") e = TimeValue("3:15 PM") t = 0 b = 0 Do While DateDiff("n", s, e) > 0 If s >= TimeValue("3:00 PM") And s < TimeValue("3:15 PM") Then b = b + 1 '-15 s = DateAdd("n", 1, s) t = t + 1 Loop MsgBox b ' 14 ' -------------------------------------------------------- s = TimeValue("2:50 PM") e = TimeValue("3:15 PM") t = 0 b = 0 Do While DateDiff("n", s, e) > 0 If s >= TimeValue("3:00 PM") And s < TimeValue("3:15 PM") Then b = b + 1 '-15 s = DateAdd("n", 1, s) t = t + 1 Loop MsgBox b ' 15 End Sub |
上と下ではスタート(s)の開始時刻が違うだけなのだが、3:00から3:15までというIFに対して上と下で判定が違って、bの値が同じにならない。
比較をDateDiffにすることで解決した。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub TEST1() s = TimeValue("2:00 PM") e = TimeValue("3:15 PM") t = 0 b = 0 Do While DateDiff("n", s, e) > 0 If 0 >= DateDiff("n", s, TimeValue("3:00 PM")) And 0 < DateDiff("n", s, TimeValue("3:15 PM")) Then ' 3:00 - 3:14 b = b + 1 '-15 End If s = DateAdd("n", 1, s) t = t + 1 Debug.Print s & " _ " & t & " _ " & b Loop MsgBox b ' 15 ' -------------------------------------------------------- s = TimeValue("2:50 PM") e = TimeValue("3:15 PM") t = 0 b = 0 Do While DateDiff("n", s, e) > 0 If 0 >= DateDiff("n", s, TimeValue("3:00 PM")) And 0 < DateDiff("n", s, TimeValue("3:15 PM")) Then ' 3:00 - 3:14 b = b + 1 '-15 End If s = DateAdd("n", 1, s) t = t + 1 Loop MsgBox b ' 15 End Sub |