この記事では、エクセルVBAの処理時間を計測する方法をご紹介していきます。
処理の高速化を行う際などに、ぜひご活用ください。
それでは早速やっていきます!
計測される側のマクロを準備しておく
この記事では、マクロ処理にかかる時間を計測していきますので、まずは適当な計測される側のマクロを記述しておきましょう。
今回は、以下のマクロの処理時間を計測してみます。
Sub test1()
Dim i As Integer
For i = 1 To 500
If i Mod 2 = 1 Then
Sheets(1).Activate
Cells(i, 1) = i
Sheets(3).Activate
Else
Sheets(2).Activate
Cells(i, 1) = i
Sheets(3).Activate
End If
Next
End Sub
無駄にシートを500回繰り返し、あえて処理に時間がかかるように記述しています。
このtest1というマクロの処理時間を別のマクロを作って計測していきます。
処理時間計測用マクロを記述する
計測対象のマクロを準備できたら、いよいよこの記事の本題である処理時間を計測するマクロを記述していきましょう。
以下が処理時間を計測するマクロです。
◆サンプルコード
Sub time_measurement()
Dim start_time As Single, end_time As Single
Dim duration_time As Single
start_time = [Now() ]
Call test1
end_time = [Now() ]
duration_time = end_time - start_time
MsgBox Round(duration_time * 86400, 3) & "秒"
End Sub
基本的にやっていることは、先ほど記述したtest1というマクロを実行する直前と直後に時刻を測定しておき、それらの差をとることで処理時間を計測しているだけです。
ですので、もしあなたが記述済みのマクロの処理時間を計測したい場合は、上記のコードのtest1の部分を計測したいマクロ名に書き換えるだけでOKです。
「なんで86400をかけてるの?」
と思っている人は多いと思います。
その答えは以下の記事で紹介しています。
【VBA】指定時間だけ待つ方法!1秒以下(ミリ秒)でも指定可能!
この記事を読めばなぜこんなことをしているのか理解できるはずです。
ぜひあわせてご覧ください。
サンプルマクロの実行結果
最後に先ほど紹介したマクロの処理時間を計測するマクロを実行してみましょう。
最初に紹介したサンプルコード内にあるFor Nextの繰り返し回数をもともとの500回と、倍にした1000回でそれぞれ計測してみます。
まずは500回の方。
実行するとまずは以下のように各シートに処理内容である数値が記載されていることが確認できました。
⇒問題なくマクロは最後まで実行されているということです。
そして以下がこのマクロの処理時間です。
(さすがに500回も繰り返すと時間がかかります・・・。)
次は繰り返し回数を1000回にしてみましょう。
以下が算出された処理時間です。
処理回数が2倍になったことで処理時間もほぼ2倍に増えていることがわかります。
先ほど紹介した処理時間の計測マクロは問題なく動作していそうですね。
おわりに
というわけで今回はマクロの処理時間を計測するマクロをご紹介しました。
ぜひ処理の高速化を行う際にご活用ください。
また、
「処理の高速化ってどうすればいいの?」
という人も多いと思います。
そんな人に向けて、以下の記事はマクロの処理時間を短くするテクニックをいくつかご紹介しようと思います。
【VBA】マクロ処理を高速化する方法3つ!時間を測りながら実演!
ぜひご覧ください。
このように、私のブログではエクセルスキルはもちろん、様々なプログラミングスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
それではまた!
コメント