サイトについて      連絡先   検索

VBA 高速化

はじめに

Excel VBA の処理を高速化する方法を紹介します。

Application.ScreenUpdating で処理を高速化できます。

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

高速化

VBA の処理を高速化する一番の方法は、描画を停止することです。

Range("A1").Value = "あいう" のようにセルに対して操作すると、そのたびに Excel の画面が更新されます。これに時間がかかるため描画を停止させます。

描画を停止するには Application.ScreenUpdating = False のように指定します。

Public Sub Tips
    Application.ScreenUpdating = False

    ' 時間のかかる処理

    Application.ScreenUpdating = True
End Sub

処理の最後に Application.ScreenUpdating = True にして描画をするのを忘れないようにします。これだけで、十分に高速化を期待できます。

時間のかかる処理の途中で更新したいときは次のようにします。

Public Sub Tips
    Application.ScreenUpdating = False

    Dim l As Long
    For l = 0 To 10000
        
        ' 処理

        ' 1000 回に 1 回描画する
        If l Mod 1000
            Application.ScreenUpdating = True
            Application.ScreenUpdating = False
        Next
    Next

    Application.ScreenUpdating = True
End Sub

描画したいタイミングで Application.ScreenUpdating = True にし、その後 False に戻します。

処理時間を計測する

Timer 関数を使用して処理時間を計測できます。

Public Sub WatchTime
    Dim t As Single
    t = Timer

    ' 時間のかかる処理

    Debug.Print (Timer - t)
End Sub

その他の高速化

描画を停止する以外に高速化するポイントを紹介します。効果はわずかの可能性があります。

コードを短くする

コードは書いただけ処理をする必要があるので、できるだけ短いコードで処理できるようにします。

やりたいことを複数の方法で実現できるのであれば、できるだけコードが短くなるようにします。

無駄な処理をやめる

セルを初期化するときに、書式設定していないのに書式を初期化するなどやらなくていい処理はやめます。

本当に必要な処理だけをやれば高速化につながります。

型を指定する

Variant や Object などあいまいな型で処理をするより、Integer など型を指定した方が高速化します。

関連ページ