VBA には 午前 0 時から経過した秒数を返す Timer 関数が用意されています。戻り値は単精度浮動小数点型 (Single) です。そんな関数をいったい何に使うのかといえば、主にマクロの中に書かれた コードの処理時間を計測する ために用います。
【VBA】Timer関数を使って処理時間を計測します
VBA のコードを書くときに複数の方法を思いついて「どっちのほうが速いのかな~」て迷ったときには Timer関数 を使って計測してください。
最初に For…Next ステートメントを用いて 2 次元配列に 100 万個のデータを入れて 処理時間を計測 してみましょう。といっても、これぐらいの処理なら一瞬で終わります。
Option Base 1
Sub Process_Speed_Test_A()
Dim starttime As Single
Dim myspeed As Single
Dim j As Integer, k As Integer
Dim y As Integer
Dim x(1000, 1000) As long
y = 0
‘処理前の時刻を記録
starttime = Timer
For j = 1 To 1000
For k = 1 To 1000
x(j, k) = y
y = y + 1
Next k
Next j
‘処理時間を記録
myspeed = Timer – starttime
Debug.Print “処理時間は” & myspeed & “秒です”
End Sub
Process_Speed_Test_A() を実行すると
と表示されます(もちろん実行環境によって表示される速度は異なります)。Timer 関数で処理時間を計測するときには、計りたい処理の直前でまず最初の値をとります。上のマクロでは繰返し処理直前に
で時刻を取得して変数 starttime に入れています。そして処理の直後にもう1度値をとって、最初にとった時刻から引き算して処理時間を計測します。
次は予めワークシートの A1 セルから ALL1000 までの 100 万個のデータを 2 次元配列に放り込む時間を計ってみます。
Sub Process_Speed_Test_B()
Dim starttime As Single
Dim myspeed As Single
Dim myrange As Variant
‘処理前の時刻を記録
starttime = Timer
myrange = Range(“A1:ALL1000”)
‘処理時間を記録
myspeed = Timer – starttime
Debug.Print “処理時間は” & myspeed & “秒です”
End Sub
Process_Speed_Test_B() を実行するとイミディエイトウィンドウに
と表示されます。やっぱりワークシートから値を取り込むにはかなり時間がかかりますね。それではまた次回お会いしましょう。
コメント