教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

【ExcelVBA その他操作】処理中の画面ちらつきを止める(ScreenUpdating)にはどうすればいいの?教えて!

構文

構文は以下の通りです。

Application.ScreenUpdating = True / False

解説

Application.ScreenUpdatingプロパティは、画面の更新を制御するために使用されます。画面の更新を無効化する場合はFalseを指定し、画面の更新を有効化する場合はTrueを指定します。通常、VBAコードが実行されると、画面が一瞬消えて再描画されることがあります。これは、画面の更新が行われるためです。しかし、大量のデータを処理する場合や、複数の処理を順番に実行する際には、画面の更新が起こるたびに時間がかかってしまいます。そのため、ScreenUpdatingを使用して画面の更新を一時的に停止することで、処理速度を向上させることができます。

使い方

画面の更新を停止させる部分の前後に、以下のコードを追加します。

Application.ScreenUpdating = False ' 画面の更新を無効化

処理が終わった後には、以下のコードを使用して画面の更新を再開します。

Application.ScreenUpdating = True ' 画面の更新を有効化

これにより、画面の更新が一時的に停止されるため、処理速度が向上します。

プログラミング例

具体的なプログラミング例を示します。以下の例では、セルに数字を1から10まで順に代入する処理を行います。

Sub ScreenUpdatingExample()
    Dim i As Integer
    ' 画面の更新を停止
    Application.ScreenUpdating = False
    For i = 1 To 10
        ' セルに数字を代入
        Range("A" & i).Value = i
        ' 1秒待機(処理の確認のため)
        Application.Wait Now + TimeValue("00:00:01")
    Next i
    ' 画面の更新を再開
    Application.ScreenUpdating = True
End Sub

この例では、処理が実行される間、画面の更新が停止されます。セルに数字を順に代入するため、画面が一瞬で更新されることなく、一連の処理が実行されます。また、Application.Wait関数を使用して、各セルに数字を代入するごとに1秒間の待機時間を設けています。

まとめ

ScreenUpdatingは、画面の更新を一時的に停止するための機能です。大量のデータ処理や複数の処理を順番に実行する場合に、画面の更新を制御することで処理速度を向上させることができます。使い方は簡単で、処理を開始する前にApplication.ScreenUpdating = Falseと設定して画面の更新を無効化し、処理が終わった後にApplication.ScreenUpdating = Trueと設定して画面の更新を再開します。用な機能です。是非活用ください。