経過時間を測定する

イベント・タスク

はじめに

 Excel vba でプログラムの処理時間などを求めたい時には、Now関数やTime関数、または、Timer関数を利用します。Now関数やTime関数は最小単位がTimer関数は最小単位がミリ秒(1/100秒)となります。

 具体的な使用例を見ていきます。

Now関数で経過時間表示

 Now関数は、日付型を返す関数で、日時を「2024/10/06 6:01:48」のような形で出力します。
プログラムの処理時間の処理時間を求めるには、Now関数をプログラムの最初と最後に実行して引き算すればOKです。

 以下のプログラムでは、メッセージボックスを表示していた経過時間を表示しています。

Sub testNow()
    Dim startT As Date '日付型
    Dim stopT As Date
    Dim totalT As Date
    
    startT = Now   'Now 関数は、現在の日時を返す。
    Debug.Print startT
    
    '//処理
    MsgBox "時間計測中"
    
    stopT = Now
    Debug.Print stopT
    
    totalT = stopT - startT
    Debug.Print totalT
    '計測できる最小は秒単位。
End Sub

 結果は、以下のようになります。(メッセージボックスを表示していた時間により変化します。)
計測できる最小単位はとなります。

2024/10/06 6:35:03 
2024/10/06 6:35:06 
0:00:03 

Timer関数で経過時間表示

 Time関数は、日付型で時刻を返す関数で「6:38:56」(時間:分:秒) のような形で出力します。
Timer関数で出力された値から、時間、分、秒を取得したい場合は、それぞれ Hour関数、Minute関数、Second関数を使用します。

 こちらも計測できる最小単位は、となります。

Sub testTime()
    Dim startT As Date '日付型
    Dim stopT As Date
    Dim totalT As Date
    
    startT = Time   'Time 関数は、現在の時刻を返す。
    
    '//処理
    MsgBox "時間計測中"
    
    stopT = Time
    
    totalT = stopT - startT
    Debug.Print totalT
    Debug.Print Format(totalT, "h:mm:ss")
    Debug.Print Hour(totalT) & "時間 " & Minute(totalT) & "分 " & Second(totalT) & "秒"
    '計測できる最小は秒単位。
End Sub

 結果は、以下のようになります。(メッセージボックスを表示していた時間により変化します。)

6:43:47 
6:43:50 
0:00:03 
0時間 0分 3秒

Timer関数で経過時間表示

 Timer関数は、現在の時刻を数値型のSingleで返します。最小単位がミリ秒(1/100秒)なのでNow関数やTime関数よりも細かい計算ができます。

 Time関数が返すのは数値型です。時刻が 0:01:01.35 なら 61.35 を返します。

Sub testTimer()
    Dim startT As Single '数値型
    Dim stopT As Single
    Dim totalT As Single
    
    startT = Timer
    Debug.Print startT
    
    '//処理
    MsgBox "時間計測中"
    
    stopT = Timer
    Debug.Print stopT
    
    totalT = stopT - startT
    Debug.Print totalT
    Debug.Print Format(totalT, "0.00")
    '計測できる最小は 1/100秒単位。
End Sub

 結果は、以下のようになります。(メッセージボックスを表示していた時間により変化します。)

 24948.23 
 24954.46 
 6.234375 
6.23

 最後は、Format関数で小数点以下2つまで表示させています。

まとめ

 プログラムの高速化を図る場合などに経過時間を計測するのは必須の技術となります。
高速化の基本は、何度も繰り返す処理を見直したり、ExcelVBAであればセルへの描画を一時中断するなどの方法が取られます。

 より細かい精度が欲しければ、Timer関数を使う事になるでしょう。それほど難しくはないと思いますが、Now関数、Time関数は日付型。Time関数は数値型(Single)であることに注意しましょう。

コメント

タイトルとURLをコピーしました