更新日:、 作成日:
VBA Timer 関数:経過時間を取得する
はじめに
Excel VBA マクロの Timer 関数から経過時間を取得する方法を紹介します。
Timer 関数は、0 時からの経過時間を秒数とミリ秒で返します。
現在時刻が 0:01:00.24 なら 60.24 を返します。
処理後 - 処理前 のようにして、経過時間を計測できます。
ミリ秒だけを取得して、現在日時にミリ秒を加えた時間を取得できます。
処理の経過時間を計測したいときに便利です。
Timer 関数の引数と戻り値
Timer()
午前 0 時 から経過した秒数とミリ秒を取得します。
戻り値の型 | 数値型 (Single) |
解説
本日 0:00:00 からの経過時間を秒数に小数を付けて返します。
現在時刻が 0:01:00.24 なら 60.24 を返します。
戻り値は Single 型ですが Double 型に代入すると、より精度の高い小数を取得できます。
結果の秒数だけを取得するには「Int 関数」を使用して、小数を切り捨てます。
結果のミリ秒だけを取得するには 結果 - 秒数 から、ミリ秒を計算できます。
現在日時を「Now 関数」や「Time 関数」から取得して、それにミリ秒を加えるとミリ秒単位の現在日時を取得できます。
経過時間
処理の経過時間を計測するには 処理後 - 処理前 から、経過時間を計算できます。
処理を「高速化」したいときに使用します。
Timer 関数の精度は約 15 ミリ秒です。そのため、それより短い時間の単位では計測できません。
スポンサーリンク
使用例
Timer 関数の使用例を紹介します。
0 時からの経過時間を取得する
0 時からの経過時間を取得します。
Dim f As Single
f = Timer
Debug.Print(f) ' 11045.14
Dim d As Double
d = Timer
Debug.Print(d) ' 11045.140625
秒数やミリ秒を取得する
秒数やミリ秒を取得します。
Dim 時刻 As Double
時刻 = Timer
Debug.Print(時刻) ' 11045.140625
Dim 秒数 As Double
秒数 = Int(時刻)
Debug.Print(秒数) ' 11045
Dim ミリ秒 As Double
ミリ秒 = 時刻 - 秒数
Debug.Print(ミリ秒) ' 0.140625
' 現在日時
Debug.Print(Format(Now, "yyyy/mm/dd h:nn:ss") & Mid(ミリ秒, 2)) ' 2013/01/02 3:04:05.140625
Debug.Print(Format(Time, "h:nn:ss") & Mid(ミリ秒, 2)) ' 3:04:05.140625
経過時間を計測する
処理後 - 処理前 から、経過時間を計測できます。
Public Sub WatchTime
Dim t As Double
t = Timer
' 時間のかかる処理
Debug.Print(Timer - t) ' 1.23 などの秒数
End Sub
Timer 関数の精度が約 15 ミリ秒なので、それより短い時間のときは 0 秒になり計測できません。そのときは、処理を 1000 回くらいループすると 1 回あたりの時間を計測できます。
Public Sub WatchTime
Dim startTime As Double
Dim stopTime As Double
startTime = Timer ' 処理前
Dim i As Integer
For i = 1 To 1000
' 時間のかかる処理
Next
stopTime = Timer ' 処理後
Debug.Print(stopTime - startTime) ' 1000 回分の経過時間
' 1000 で割ると 1 回の時間になる
End Sub