Excel VBA | 「配列処理 × Application.ScreenUpdating / Calculation / EnableEvents」高速化テクニック

VBA
スポンサーリンク

Excel VBAで大量データを扱うとき、配列処理と組み合わせて
Application.ScreenUpdating / Application.Calculation / Application.EnableEvents を制御すると、処理速度が劇的に向上します。


高速化の基本設定

Application.ScreenUpdating = False   ' 画面更新を止める
Application.Calculation = xlCalculationManual   ' 自動計算を止める
Application.EnableEvents = False     ' イベントを止める
VB
  • ScreenUpdating → 画面描画を止めることで処理中のチラつきを防ぎ、速度UP
  • Calculation → 数式再計算を止めることで、大量データ処理時の再計算負荷を回避
  • EnableEvents → Changeイベントなどを止めて、無駄なイベント発火を防止

処理終了後は必ず 元に戻す ことが重要です。

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
VB

配列処理との組み合わせ例

例1:数値を2倍にして書き戻す

Sub FastArrayProcess()
    Dim lastRow As Long, lastCol As Long
    Dim data As Variant
    Dim i As Long, j As Long
    
    ' 高速化設定
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    
    ' 自動範囲検出
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
    
    ' 配列に読み込み
    data = Range(Cells(1, 1), Cells(lastRow, lastCol)).Value
    
    ' 配列処理
    For i = 1 To UBound(data, 1)
        For j = 1 To UBound(data, 2)
            If IsNumeric(data(i, j)) Then
                data(i, j) = data(i, j) * 2
            End If
        Next j
    Next i
    
    ' 一括書き戻し
    Range(Cells(1, 1), Cells(lastRow, lastCol)).Value = data
    
    ' 高速化解除
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
End Sub
VB

応用パターン

例2:文字列加工(末尾に「_done」付加)

If VarType(data(i, j)) = vbString Then
    data(i, j) = data(i, j) & "_done"
End If
VB

例3:条件付き処理(空白セル補完)

If IsEmpty(data(i, j)) Then
    data(i, j) = "未入力"
End If
VB

例4:イベント抑制で安全処理

  • 大量データ貼り付け時に Worksheet_Change イベントが暴走するのを防げる。

実務での使い分けポイント

  • 大量データ処理 → 配列必須
  • 画面更新停止 → ScreenUpdating
  • 再計算停止 → Calculation
  • イベント停止 → EnableEvents
  • 処理後は必ず元に戻す → 安定性確保

💡 この「配列処理 × ScreenUpdating / Calculation / EnableEvents」テクニックを使えば、数万行の処理も一瞬で完了します。

👉 次は「配列処理 × 高速化設定 × Dictionary / Collection を組み合わせた応用テクニック」も紹介できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました