Windows

Excel VBAの処理を高速化する方法

スポンサーリンク

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
タイトルとURLをコピーしました