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 を組み合わせた応用テクニック」も紹介できます。


