VBAの中でセルに値を設定したり、シートを移動するなどの処理を行うとExcelの画面もリアルタイムに更新されます。
軽い処理であれば問題になることはありませんが、重い処理になると画面の更新がボトルネックとなり処理速度が著しく低下します。
この記事では、画面の更新を止めることで処理速度を高速化する方法を記載します。
画面更新の停止と再開方法
Excel VBAの開始時に画面の更新を止めるコードを記述します。
With Application .ScreenUpdating = False .DisplayAlerts = False .EnableEvents = False .Calculation = xlCalculationManual End With
Excel VBAの終了時に画面の更新を再開するコードを記述します。
With Application .ScreenUpdating = True .DisplayAlerts = True .EnableEvents = True .Calculation = xlCalculationAutomatic End With
プロパティの説明
各プロパティの使い方、説明を記載します。
Application.ScreenUpdatingプロパティ
VBA処理中の画面更新を制御するプロパティです。
設定値 | 内容 |
False | 画面の更新を無効にする |
True | 画面の更新を有効にする |
Application.DisplayAlerts
VBA処理中の警告やメッセージ表示を制御するプロパティです。
設定値 | 内容 |
False | 警告やメッセージの表示を無効にする |
True | 警告やメッセージの表示を有効にする |
Application.EnableEvents
VBA処理中のイベント発生を制御するプロパティです。
設定値 | 内容 |
False | イベントの発生を無効にする |
True | イベントの発生を有効にする |
Application.Calculation
VBA処理中の自動計算を制御するプロパティです。
設定値 | 内容 |
xlCalculationManual | 計算を手動に設定する |
xlCalculationAutomatic | 計算を自動に設定する |
サンプルコード
VBAの開始時と終了時のコードを記載します。
処理中のエラーに対応するため、例外処理で画面の更新を再開するようにしています。
Option Explicit Public Sub Main() On Error GoTo ErrHandler 'VBA開始時 With Application .ScreenUpdating = False '画面更新の停止 .DisplayAlerts = False '確認メッセージの停止 .EnableEvents = False 'イベントの停止 .Calculation = xlCalculationManual '計算方法を手動に変更 End With 'VBA処理部 'VBA終了時 With Application .ScreenUpdating = True '画面更新の停止 .DisplayAlerts = True '警告やメッセージの停止 .EnableEvents = True 'イベントの停止 .Calculation = xlCalculationAutomatic '計算方法を自動に変更 End With Exit Sub '例外処理 ErrHandler: 'エラー処理部 'VBA終了時 With Application .ScreenUpdating = True '画面更新の停止 .DisplayAlerts = True '警告やメッセージの停止 .EnableEvents = True 'イベントの停止 .Calculation = xlCalculationAutomatic '計算方法を自動に変更 End With End Sub