Timer
Timer関数は0時から経過した秒数を取得できます。
この特性から、処理時間を計測したい前後でそれぞれTimer関数を実行すると、その差から処理時間に掛かった秒数を算出できます。
一般的にはこのような計測に使われることが多いと思われます。
Timer関数はミリ秒も一応取れますが精度は高くないため、高精度でのミリ秒の計測を行いたい場合は「VBAでミリ秒やマイクロ秒の計測を行う」を参照ください。
構文
1 |
Property Timer As Single |
Property | Timer関数はDateTimeクラスのメンバです。ただ、クラスメンバとは言っても関数を直接使って構わないためあまり気にしなくてもいいです。 |
Single(戻り値) | 0時から現在までの経過秒数をSingle型(単精度浮動小数点数型)で返します。整数部分は秒数を表し、小数部分はミリ秒以下を表します。 |
注意点:0時をまたがる場合
Timer関数を複数回呼び出して、その間の経過秒数を取得する場合、0時をまたがっているかどうかに注意する必要があります。
0:00:10と0:01:00の差は50秒です。Timer関数はそれぞれ10秒と60秒を返すため、その差からも50秒を求めることが出来ます。この計算は、0:00:10よりも0:01:00の方が時刻として未来側にあることを前提にしています。
ところが、23:59:00とそれから2分後の日が変わった0:01:00のそれぞれでTimer関数を実行すると86390秒と60秒が返ります。このときの秒差は60 – 86390 = -86330秒、で正しいのかというと、もちろん正しくありません。
このように0時をまたがる秒差を求める場合は、日付が変わったかどうかを考慮する必要があります。日付が変わってなければ単純な引き算を行い、変わっていれば単純な引き算+86400×日付差数から秒数を算出します。
サンプルコード
処理の前後にTimer関数を置いて、差を計測するサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub TimerTest() Dim d1 As Double Dim d2 As Double Dim i Dim s d1 = Timer For i = 0 To 1000000 s = CStr(i) Next d2 = Timer Debug.Print "1回目:" & d1 Debug.Print "2回目:" & d2 Debug.Print "差の秒数:" & d2 - d1 End Sub |
実行結果
1 2 3 |
1回目:9580.353515625 2回目:9580.599609375 差の秒数:0.24609375 |