top of page
執筆者の写真yuji fukami

プログラムの実行時間をストップウォッチのように計測する

更新日:1月17日


<概要>


今回は、既存のVBAコードにおける実行時間をストップウォッチのように計測する汎用プロシージャを紹介します。



<用途>


  • 既存処理の実行時間を計測して、プログラムの中で時間を要している処理を特定する



<プロシージャ紹介>


Public Sub StopWatch([Reset As Boolean = False])


名前: StopWatch /Subプロシージャ

説明: 1回目の実行で計測を開始し、以降の実行で計測開始からの経過時間と前回実行時からの経過時間をイミディエイトウィンドウに表示する



'引数

'Reset・・・計測をリセットするかどうか(省略ならリセットしない)



<実行例>


次のようなコードを用意します。


各処理過程の途中途中でStopWatchプロシージャを実行しますが、最初の1回目は引数をTrueとして計測を初期化します。ストップウォッチでいえば「Start」です。

2回目以降のStopWatchプロシージャ実行では引数をFalseとして途中の実行時間をイミディエイトウィンドウに表示させます。


Public Sub TestStopWatch()
    
    Call StopWatch(True) '計測初期化
    Dim I As Long
    Dim Value As Long
    
    For I = 1 To (10) ^ 6
        Value = Value + 1
    Next
    
    Call StopWatch(False) '計測1回目
    
    For I = 1 To (10) ^ 7
        Value = Value + 1
    Next
    
    Call StopWatch(False) '計測2回目
    
    For I = 1 To (10) ^ 8
        Value = Value + 1
    Next
    
    Call StopWatch(False) '計測3回目
    
    For I = 1 To (10) ^ 9
        Value = Value + 1
    Next
    
    Call StopWatch(False) '計測4回目
    
End Sub

実際にイミディエイトウィンドウに結果が表示されます。



<サンプルファイル>




<コード>


 Gist

Public Sub StopWatch(Optional Reset As Boolean = False)
'時間を計測する
'1回目の実行で計測を開始し、以降の実行で計測開始からの経過時間と前回実行時からの経過時間をイミディエイトウィンドウに表示する
'20220927
'https://www.softex-celware.com/post/stopwatch
    
'引数
'Reset・・・計測をリセットするかどうか(省略ならリセットしない)
    
    '実行回数加算
    Static Count実行 As Long
    If Reset = True Then
        Count実行 = 1
    Else
        Count実行 = Count実行 + 1
    End If
    
    Static Time_開始時刻 As Double
    Static Time_前回時刻 As Double
    If Count実行 = 1 Then '初回実行
        Time_開始時刻 = Timer '開始時刻保存
        Time_前回時刻 = Timer '次回用に前回時刻として保存
        
    Else '2回目以降実行
        Dim Time_現在時刻         As Double: Time_現在時刻 = Timer
        Dim Time_開始から経過時間 As Double: Time_開始から経過時間 = Time_現在時刻 - Time_開始時刻
        Dim Time_前回から経過時間 As Double: Time_前回から経過時間 = Time_現在時刻 - Time_前回時刻
        Time_前回時刻 = Time_現在時刻
        
        Debug.Print "回数:" & Count実行 - 1, _
                    "開始から経過時間:" & Format(Time_開始から経過時間, "0.000") & "s", _
                    "前回から経過時間:" & Format(Time_前回から経過時間, "0.000") & "s"
    End If
    
End Sub

閲覧数:140回0件のコメント

最新記事

すべて表示

Comments


bottom of page