はじめに
作成したVBAマクロが、どれくらいの時間で処理を完了しているか、正確に知りたいと思ったことはありませんか?特に、扱うデータ量が増えたり、コードを改善したりした際に、その効果を数値で比較できると非常に便利です。
VBAには、Timer
という関数が用意されており、これを使うとマクロの実行にかかった時間を簡単に計測することができます。
この記事では、Timer
関数を使って、特定の処理にかかった時間を秒単位で計測し、表示するための基本的な方法を解説します。
処理時間を計測するVBAサンプルコード
このマクロは、以下の手順で処理時間を計測します。
- 処理を開始する直前に、
Timer
関数の値を「開始時刻」として変数に保存します。 - 計測したいメインの処理を実行します。
- 処理が完了した直後に、再度
Timer
関数の値を取得し、「開始時刻」との差分を計算します。
完成コード
' マクロの実行時間を計測する
Sub MeasureExecutionTime()
'--- 1. 開始時刻を記録 ---
Dim startTime As Single
startTime = Timer
'--- 2. 時間を計測したい処理 ---
' (例: 大量のセルに値を書き込む処理)
Dim i As Long
For i = 1 To 50000
Cells(i, "A").Value = i
Next i
'--- 3. 終了時刻との差分を計算して表示 ---
Dim endTime As Single
Dim elapsedTime As Single
endTime = Timer
elapsedTime = endTime - startTime
MsgBox "処理が完了しました。" & vbCrLf & vbCrLf & _
"処理時間: " & elapsedTime & " 秒", vbInformation, "処理時間計測"
End Sub
コードの解説
Timer
関数とは?
Timer
関数は、深夜0時からの経過秒数を、Single
(単精度浮動小数点数)型の数値で返す、VBAの組み込み関数です。
例えば、午前9時ちょうどに Timer
を実行すると、32400
(9時間 × 3600秒) という値が返されます。
startTime = Timer
処理を開始する直前の、深夜0時からの経過秒数(例: 32400.50
秒)を変数 startTime
に格納しています。
elapsedTime = endTime - startTime
処理が終わった直後の経過秒数(例: 32402.75
秒)から、開始前の startTime
を引き算します。その差が、まさしく処理にかかった時間(この例では 2.25
秒)となります。
注意点
Timer
関数は深夜0時にリセットされるため、マクロの実行が深夜0時をまたぐ可能性がある場合は、Now()
関数などを使って日付も一緒に記録し、時間を計算する必要があります。しかし、ほとんどのVBAマクロは数分以内に完了するため、通常は Timer
関数だけで十分です。
まとめ
今回は、VBAの Timer
関数を使って、マクロの処理時間を計測する簡単な方法を解説しました。
- 処理の前に
Timer
の値を記録する。 - 処理の後に
Timer
の値を記録する。 - 差分を計算すれば、それが処理時間になる。
このシンプルな手法で、コードのパフォーマンス改善の効果を客観的な数値で確認できるようになります。時間のかかる処理を改善する際には、ぜひこの計測方法を活用してみてください。