画面の再描画を一時停止する

広告

マクロを実行している時に、背景色を変更したり、セルの値を別のセルにコピーしたりといった処理を行うと、その都度処理した内容が画面に更新されていきます。通常は問題無いのですが、大量の処理を一度に行う場合など都度画面更新がされていると処理が遅くなってしまいます。その為、画面の更新を一時的に停止させ、全ての処理が終わってから画面更新を行うようにすればスピードアップになる場合があります。

画面の再描画を一時停止するには、Applicationオブジェクトの「ScreenUpdating」プロパティに「False」を設定します。

Application.ScreenUpdating = False

繰り返し行われるような処理が終わった段階で「True」を設定することで画面の再描画が再開されます。

この設定は永続的なものではなく、マクロの実行が終了すると自動的に設定は「True」に戻ります。

サンプルプログラム

では簡単なサンプルで試してみましょう。下記のサンプルは1つのセルをコピーし沢山のセルに貼り付けるという処理を、再描画ありと再描画無しの二通りで行い、かかった時間を測定しています。

testapplicaiotnother5.bas

Sub テスト()

    Dim time1 As String
    Dim time2 As String
    
    time1 = anyCopy()
    
    Application.ScreenUpdating = False
    
    time2 = anyCopy()
    
    MsgBox "再描画ありは" & time1 & "秒、再描画無しは" & time2 & "秒"
    
    Application.ScreenUpdating = True
    
End Sub

Function anyCopy() As Variant

    Dim startTime As Variant
    Dim endTime As Variant
    
    Cells(1, 1).Copy
    
    startTime = Time

    For i = 1 To 500
        For j = 1 To 100
            ActiveSheet.Paste Destination:=Cells(i, j)
        Next j
    Next i

    stopTime = Time
    
    anyCopy = (stopTime - startTime) * 24 * 60 * 60

End Function

上記マクロを実行すると次のようになります。

画面再描画の一時停止

処理にかかる時間を大幅に削減できました。

Excel VBA入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)