VBA Timer 関数:経過時間を取得する

はじめに

Excel VBA マクロの Timer 関数から経過時間を取得する方法を紹介します。

Timer 関数は、0 時からの経過時間を秒数とミリ秒で返します。

現在時刻が 0:01:00.24 なら 60.24 を返します。

処理後 - 処理前 のようにして、経過時間を計測できます。

ミリ秒だけを取得して、現在日時にミリ秒を加えた時間を取得できます。

処理の経過時間を計測したいときに便利です。

現在の日時を取得するには「Now 関数」を使用します。
処理を高速化するには「高速化」をご覧ください。
  • 目次
    • Timer 関数
    • 解説
    • 使用例

Timer 関数

Timer()
午前 0 時 から経過した秒数とミリ秒を取得します。

戻り値の型数値型 (Single)

解説

本日 0:00:00 からの経過時間を秒数に小数を付けて返します。

現在時刻が 0:01:00.24 なら 60.24 を返します。

戻り値は Single 型ですが Double 型に代入すると、より精度の高い小数を取得できます。

結果の秒数だけを取得するには「Int 関数」を使用して、小数を切り捨てます。

結果のミリ秒だけを取得するには 結果 - 秒数 から、ミリ秒を計算できます。

現在日時を「Now 関数」や「Time 関数」から取得して、それにミリ秒を加えるとミリ秒単位の現在日時を取得できます。

経過時間

処理の経過時間を計測するには 処理後 - 処理前 から、経過時間を計算できます。

処理を「高速化」したいときに使用します。

Timer 関数の精度は約 15 ミリ秒です。そのため、それより短い時間の単位では計測できません。

使用例

経過時間を取得する。

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