pgbigorokuのブログ

プログラムの再利用できそうなコードをアップ

EXCEL VBA マクロ実行速度を上げる

マクロの実行速度を「描画処理の停止」および「EXCEL自動計算の停止」により高速化します。

デバッグ時などで異常終了した場合は、「強制復帰」の関数をイミディエイト画面で実行してください。

サンプル

    mdl高速化.高速化開始 (True)
    mdl高速化.高速化終了

ソースコード(標準モジュール)

'オブジェクト名は「mdl高速化」にしてください。
'
'   モジュール⑦機能   : VBAの処理速度を上げます。
'
'内容            下記2つのEXCEL計算を止めて高速化します。
'         処理により計算が必要な場合は、手動で更新してください。
'                Application.Calculation
'                Application.ScreenUpdating
'
'         ※デバッグ時などで異常終了した場合は、「強制復帰」をイミディエイト画面で実行すると治ります
'プロパティ
'   -
'関数
'       高速化開始  開始時
'       高速化終了  終了時
'
'URL https://pgbigoroku.hatenablog.com/entry/2022/08/18/160110
'2022/8/17


Option Explicit

Dim mCalculation As Integer

Public Sub 高速化開始(Optional ByRef bln開始時確認 As Boolean = False)
    If bln開始時確認 = True Then
        Select Case MsgBox("マクロ実行速度を上げます。" & vbCrLf & "画面の更新処理および自動計算を一旦止めます。" & vbCrLf & "(異常時は「強制復帰」を実行してください。)", vbYesNoCancel)
            Case vbYes:
                '何も処理をしない。
            Case vbNo:
                Exit Sub
            Case Else:
                Stop
        End Select
    
    End If
    mCalculation = Application.Calculation
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
End Sub

Public Sub 高速化終了(Optional ByVal pbln自動計算 As Boolean = True)
    Application.ScreenUpdating = True
    If mCalculation = 0 Then
        If pbln自動計算 = True Then
            Application.Calculation = xlCalculationAutomatic
        End If
    Else
        If pbln自動計算 = True Then
            Application.Calculation = xlCalculationAutomatic
        Else
            Application.Calculation = mCalculation
        End If
    End If
End Sub

Public Sub 強制復帰()
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
End Sub