[VBA] Timer関数で処理時間を計測します

 VBA には 午前 0 時から経過した秒数を返す Timer関数 というものが用意されています。戻り値は単精度浮動小数点型 (Single) です。そんな関数をいったい何に使うのかといえば、主にマクロの中に書かれた コードの処理時間を計測する ために用います。ていうか、こばとは他の使い道を知りません。

Timer関数で処理時間を計測します

 まあともかく、マクロを書くときに複数の方法を思いついて「どっちのほうが速いのかなー」て迷ったときには Timer関数を使ってくださいな。まずは For...Next ステートメントを用いて 2 次元配列に 100 万個のデータを入れる処理時間を計ってみましょう。といっても、これぐらいなら一瞬で終わるけどねー。

 Option Base 1

 '処理時間計測テストA

 Sub ProcessSpeedTestA()

 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

 このマクロを実行すると

処理時間は 0.078125 秒です

というように表示されます(もちろん実行環境によって表示される速度は異なります)。Timer 関数で処理時間を計るときは、計りたい処理の直前でまず最初の値をとります。上のマクロでは繰返し処理直前に

starttime = Timer

で時刻を取得して変数 starttime に入れています。そして処理の直後にもう1度値をとって、最初にとった時刻から引き算して処理時間を計測します。

myspeed = Timer - starttime

 次は予めワークシートの A1 セルから ALL1000 までの 100 万個のデータを 2 次元配列に放り込む時間を計ってみますよ。

 '処理時間計測テストB

 Sub ProcessSpeedTestB()

 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

 マクロを実行するとイミディエイトウィンドウに

処理時間は 0.375 秒です

というように表示されます。やっぱりワークシートから値を取り込むには少し時間がかかるようですねー。それではまた次回お会いしましょー。

スポンサードリンク
末尾大型広告
末尾大型広告

コメントをどうぞ

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)