【ExcelVBA】処理時間の計測あれこれ(クラス使用)
以下の4パターン用意しました。
Class1の内容はクラスモジュールのClass1に書き込みください。



Class1の内容は上記の「簡易計測」と同じ内容です。変更点はありません。




Class1に、追加された箇所があります。
前回とは、計測結果の違いが明確になるように複数回計測しています。しつこくてごめんなさい。







※なお、メッセージボックス「処理時間(*回目)」が表示されてからOKボタン押されるまでの時間は、次の「処理時間(*回目)」に加算されます。
ProcessTime(1) ... 計測点と計測点の間の処理時間
StartTime(0) ... 開始時間(初回のみ開始時間代入)
StartTime(1) ... 開始時間(都度、開始時間代入)



※メッセージボックス「S* 処理時間・・・」が表示されてからOKボタン押されるまでの時間は、次の「S* 処理時間・・・」に加算されます。
- 簡易計測 「計測開始」~「計測終了」までの処理時間を求める。
- 計測開始を基準点として複数回計測 「計測開始」を基準点として「計測開始」~「計測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* 処理時間・・・」に加算されます。




ディスカッション
コメント一覧
まだ、コメントがありません