マクロを高速化させようとするとまず、改良する前と後が一体どれだけ時間短縮できたのか、又はできなかったのかを把握できるようにする必要があります。
そのために時間を計れるようにする必要があります。今回はその方法をご紹介いたします。
今回は処理にかかった時間を「イミディエイトウィンドウ」に表示する方法を試したいと思います。
VBAの画面に「イミディエイトウィンドウ」がない場合はイミディエイトウィンドウの表示方法のページを参照してください。
1、処理にかかった時間を表示する
Sub 実行()
Dim starttime As Double : starttime = Timer’時間計測開始
'~処理~
myspeed = Timer - starttime’時間計測終了
Debug.Print "処理時間は" & myspeed & "秒です"
End Sub
上記のコードで計測したい処理を挟むことによってこの処理にかかる時間を表示することができます。
実行してみると
イミディエイトウィンドウに上のように表示されました。
上の例では処理の内容がありませんので、時間は0秒と表示されています。
2、処理の途中経過の時間を表示する
1、のコードよりも長く、コードのどのあたりで一番時間がかかってしまっているのかを分析するためには何段階かに分けて計測する必要があるときがあります。
その場合の例をご紹介します。
Sub 実行()
Dim starttime As Double: starttime = Timer '時間計測開始
Call 処理1
Dim myspeed Double
myspeed = Timer - starttime '時間計測経過1
myspeed = WorksheetFunction.Round(myspeed, 3)
Debug.Print "処理1の時間は" & myspeed & "秒です"
starttime = Timer '時間をリセットする
Call 処理2
myspeed = Timer - starttime '時間計測経過2
myspeed = WorksheetFunction.Round(myspeed, 3)
Debug.Print "処理2の時間は" & myspeed & "秒です"
End Sub
これを実行すると処理1に何秒かかっていて処理2に何秒かかっているのかということが一目瞭然で分かるようになります。
処理1に少し大きな計算式、処理2に簡単な計算式を入れて実行してみると
と表示されました。
これにより処理1には約6.32秒かかり、処理2には約0.06秒かかっていたことがわかりました。
処理1は処理2の100倍の時間がかかっていることが分かったので、手を付けるべきところが処理1だということがわかりました。
このような感じでお使いいただくと便利ですのでお試しください。
コメント