11.8 トドメは画面描画をOFF!
マクロを使ってワークシートの編集をしているとき、特に何も指定しないとマクロの動きに合わせてワークシートの表示内容が更新されます。マクロで何を行っているかにもよりますが、マクロを実行した後、結果が出るまでワークシートの更新が不要なときは、画面の描画をOFFにした方が処理が速くなり処理速度を向上することができます。

というわけで、もしもマクロの処理中に画面の更新が不要なときは更新をOFFにしておきましょう。画面の描画をOFFにするときは、Application.ScreenUpdating = Falseを実行し、逆に更新をONにするときはApplication.ScreenUpdating = Trueを実行します。
事例/画面更新のON・OFFそれぞれの処理速度の違い
まずは、画面更新がONの例です。例では、A1〜J30のセルに1つずつ数値を入れる処理を100回繰り返しています。実行すると、マクロが動いている間はワークシートは常に更新され、セルに数値を入れているのが見えます。

ちなみに、おいらのPCでは平均で1分前後でした。

Sub prcPath()

    '画面の更新をONで実行する例

    Dim rngCell As Range
    Dim lngNum As Long
    Dim i As Long

    Debug.Print "START=" & Time

    lngNum = 1

    For i = 1 To 100
        For Each rngCell In Range("A1:J30")
            rngCell.Value = lngNum
           lngNum = lngNum + 1
        Next
    Next

    Debug.Print "END  =" & Time

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです


次に、画面更新がOFFの例です。まったく同じ事をしています。画面更新をOFFにするとマクロ実行中はワークシートの更新が一切行れません。マクロ実行中に次に画面が更新されるのはApplication.ScreenUpdating = Trueを実行したときと、マクロの処理が全て終了したときです。

ちなみに、おいらのPCでは平均で6秒前後でした。

Sub prcRecordCount2()

    '画面の更新をOFFで実行する例

    Dim rngCell As Range
    Dim lngNum As Long
    Dim i As Long

    '画面の更新を一時的にOFFにします
    Application.ScreenUpdating = False

    Debug.Print "START=" & Time

    lngNum = 1

    For i = 1 To 100
        For Each rngCell In Range("A1:J30")
            rngCell.Value = lngNum
           lngNum = lngNum + 1
        Next
    Next

    Debug.Print "END  =" & Time

    '画面の更新をONに戻します
    Application.ScreenUpdating = True

End Sub
 ※このエクセルマクロはワークシート内へ記述するマクロです
Copyright(C) 1999-2006 結城圭介。 All rights reserved