【ExcelVBA】処理時間の計測あれこれ(クラス使用)
- 簡易計測 「計測開始」~「計測終了」までの処理時間を求める。
- 計測開始を基準点として複数回計測 「計測開始」を基準点として「計測開始」~「計測1」/「計測開始」~「計測2」の処理時間を求める。
- 計測点と計測点の間の処理時間を計測 「計測開始」~「計測1」/「計測1」~「計測2」/「計測2」~「計測3」などの処理時間を求める。
- 【応用】計測点と計測点の間の処理時間と合計時間を計測 「計測開始」~「計測1」/「計測1」~「計測2」と「計測開始」~「計測2」までの処理時間を求める。
目次
簡易計測
「計測開始」から「計測終了」までの処理時間を計測します。Class1の内容はクラスモジュールのClass1に書き込みください。
Class1 の内容
Private StartTime As Double Property Let ProcessTime(Value As Double) StartTime = Value End Property Property Get ProcessTime() As Double ProcessTime = Timer - StartTime End Property
標準モジュール の内容
Sub Sample1() Dim ClsTest As Class1: Set ClsTest = New Class1 '計測開始 ClsTest.ProcessTime = Timer MsgBox "ちょっとひとやすみ", vbInformation '計測終了 MsgBox "処理時間: " & ClsTest.ProcessTime End Sub
実行結果
計測開始を基準点として複数回計測
「計測開始」を基準点としたて「計測1回目」「計測2回目」の処理時間を求めるClass1の内容は上記の「簡易計測」と同じ内容です。変更点はありません。
Class1 の内容
Private StartTime As Double Property Let ProcessTime(Value As Double) StartTime = Value End Property Property Get ProcessTime() As Double ProcessTime = Timer - StartTime End Property
標準モジュール の内容
Sub Sample1() Dim ClsTest As Class1: Set ClsTest = New Class1 '計測開始 ClsTest.ProcessTime = Timer MsgBox "休憩", vbInformation '計測1回目(計測開始~計測1回目まで) MsgBox "計測開始点からの処理時間(1回目): " & ClsTest.ProcessTime MsgBox "休憩", vbInformation '計測2回目(計測開始~計測2回目まで) MsgBox "計測開始点からの処理時間(2回目): " & ClsTest.ProcessTime End Sub
実行結果
「計測開始」を基準点とした計測です。後に行くほど、処理時間が伸びます。計測点と計測点の間の処理時間を計測
計測点間の処理時間を表示します。Class1に、追加された箇所があります。
前回とは、計測結果の違いが明確になるように複数回計測しています。しつこくてごめんなさい。
Class1 の内容
Private StartTime As Double Property Let ProcessTime(Value As Double) StartTime = Value End Property Property Get ProcessTime() As Double ProcessTime = Timer - StartTime StartTime = Timer '←追加 End Property
標準モジュール の内容
Sub Sample1() Dim ClsTest As Class1: Set ClsTest = New Class1 '計測開始 ClsTest.ProcessTime = Timer MsgBox "休憩", vbInformation '計測1回目(計測開始~計測1回目までの処理時間) MsgBox "処理時間(1回目): " & ClsTest.ProcessTime MsgBox "休憩", vbInformation '計測2回目(計測1回目~計測2回目までの処理時間) MsgBox "処理時間(2回目): " & ClsTest.ProcessTime MsgBox "休憩", vbInformation '計測3回目(計測2回目~計測3回目までの処理時間) MsgBox "処理時間(3回目): " & ClsTest.ProcessTime MsgBox "休憩", vbInformation '計測4回目(計測3回目~計測4回目までの処理時間) MsgBox "処理時間(4回目): " & ClsTest.ProcessTime MsgBox "休憩", vbInformation '計測5回目(計測4回目~計測5回目までの処理時間) MsgBox "処理時間(5回目): " & ClsTest.ProcessTime End Sub
実行結果
※なお、メッセージボックス「処理時間(*回目)」が表示されてからOKボタン押されるまでの時間は、次の「処理時間(*回目)」に加算されます。
【応用】計測点と計測点の間の処理時間と合計処理時間
表示は 『 処理時間: 5.21 / 合計処理時間:26.4 』 な感じです。Class1 の内容
ProcessTime(0) ... 合計処理時間ProcessTime(1) ... 計測点と計測点の間の処理時間
StartTime(0) ... 開始時間(初回のみ開始時間代入)
StartTime(1) ... 開始時間(都度、開始時間代入)
Private StartTime(0 To 1) As Double Property Let ProcessTime(ByVal i As Long, Value As Double) StartTime(i) = Value '開始時間セット End Property Property Get ProcessTime(ByVal i As Long) As Double ProcessTime = Round(Timer - StartTime(i), 2) If i = 1 Then StartTime(i) = Timer '開始時間再セット End If End Property
標準モジュール の内容
サブプロシージャ毎の処理時間を計測する。Private ClsTest As Class1 Sub Sample1() Set ClsTest = New Class1 '計測開始 ClsTest.ProcessTime(0) = Timer ClsTest.ProcessTime(1) = Timer Call S1 Call S2 Call S3 End Sub Sub S1() MsgBox "休憩", vbInformation '計測ポイント MsgBox "S1 処理時間: " & ClsTest.ProcessTime(1) & " / 合計処理時間:" & ClsTest.ProcessTime(0) End Sub Sub S2() MsgBox "休憩", vbInformation '計測ポイント MsgBox "S2 処理時間: " & ClsTest.ProcessTime(1) & " / 合計処理時間:" & ClsTest.ProcessTime(0) End Sub Sub S3() MsgBox "休憩", vbInformation '計測ポイント MsgBox "S3 処理時間: " & ClsTest.ProcessTime(1) & " / 合計処理時間:" & ClsTest.ProcessTime(0) End Sub
実行結果
※メッセージボックス「S* 処理時間・・・」が表示されてからOKボタン押されるまでの時間は、次の「S* 処理時間・・・」に加算されます。
ディスカッション
コメント一覧
まだ、コメントがありません