mugaxのなんでも情報局

いろんな分野について発信していきます。

VBAの実行時間を計測する方法

VBAで作ったマクロの実行時間を測る方法は簡単だ。

まず、Timer関数を使って開始時刻を取得する。

次に、同じくTimer関数を使って終了時刻を取得する。

終了時刻から開始時刻を引けば実行時間がわかる。

    Dim start As Double
    Dim finish As Double
    start = Timer
    
    '何らかの処理
    
    finish = Timer
    Debug.Print finish - start

A1からA1000のセルに1から1000までの数値を入力するマクロで実際に実行時間を計ってみる。


Sub test01()

    Dim i As Long
    Dim start As Double
    Dim finish As Double
    
    start = Timer
    
    For i = 1 To 1000
        Range("A" & i).Value = i
    Next

    finish = Timer
    
    Debug.Print "直接入力"
    Debug.Print finish - start
End Sub

このマクロを何度か実行すると、0.1875付近の値が出る。

では、セルに直接入力ではなく、配列から入力する形にするとどうなるだろうか?


Sub test02()

    Dim arr(1 To 1000) As Long
    Dim i As Long
    Dim start As Double
    Dim finish As Double

    start = Timer
    
    For i = 1 To 1000
        arr(i) = i
    Next

    Range("A1:A1000").Value = WorksheetFunction.Transpose(arr)

    finish = Timer
    
    Debug.Print "配列から入力"
    Debug.Print finish - start
    
End Sub

このマクロを何度か実行すると、0.015625付近の値が出る。

以上の結果から、配列を使うと10倍以上速度が向上するということだ。もちろん、処理によって配列の優位性はいくらか変わるだろうが、巷間言われているように大量のセルに記入するという処理では配列を使うのがいいだろう。