Excel VBAが遅い原因はこれ!ScreenUpdating・Calculation・EnableEventsを正しく使って処理速度を劇的に改善

エクセル

ScreenUpdating・Calculation・EnableEventsの意味と使い方

Excel VBAでマクロを作っていると、

  • 処理がなかなか終わらない
  • 大量データを扱うと極端に遅くなる
  • Excelが固まったように見える

といった経験をしたことはないでしょうか。

実はその原因、多くの場合
「VBAの処理そのもの」ではなく、Excelの標準機能にあります。

このページでは、VBA高速化の基本として必ず押さえておきたい

  • Application.ScreenUpdating
  • Application.Calculation
  • Application.EnableEvents

この3つが何をしているのか、そしてなぜ高速化につながるのかを、できるだけ分かりやすく解説します。


VBAの処理が遅くなる本当の理由

Excelは、ユーザーが操作しやすいように次のような処理を自動で行っています。

  • 画面の再描画
  • 数式の再計算
  • セル変更時のイベント実行

VBAで大量のセルを更新すると、Excelは
「1行変更するたびに全部やる」
という動きをします。

これが、マクロが遅くなる最大の原因です。


Application.ScreenUpdating の役割

ScreenUpdating = False がしていること

Application.ScreenUpdating = False

これは、Excelの画面更新を一時的に止める設定です。

通常、セルの値が変わるたびにExcelは、

  • 表示を更新
  • 画面を再描画

という処理を行っています。

大量データを処理している最中にこれを毎回行うと、
処理速度が大きく低下します。

ScreenUpdatingをFalseにすると、

  • 画面は更新されない
  • 内部処理だけが高速に進む

という状態になります。


ScreenUpdating = True を忘れるとどうなる?

Application.ScreenUpdating = True

これは、画面更新を元に戻す処理です。

これを忘れると、

  • マクロは終わっているのに画面が変わらない
  • Excelが固まったように見える

といった状態になります。

だから、必ず元に戻すことが重要です。


Application.Calculation の役割

Calculation = xlCalculationManual がしていること

Application.Calculation = xlCalculationManual

これは、数式の自動再計算を止める設定です。

通常のExcelでは、

  • セルの値が変わる
    → 関連する数式をすべて再計算

という動作が行われます。

これを、
「1行ずつ」「何千回も」
繰り返すと、処理が極端に遅くなります。

Manualに設定すると、下記のようになります。

  • マクロ実行中は再計算しない
  • 最後にまとめて再計算できる

そのため、大量データ処理では必須の設定です。


Calculation = xlCalculationAutomatic の重要性

Application.Calculation = xlCalculationAutomatic

これを戻し忘れると、

  • 数式が更新されない
  • 値が変わらないExcelになる

というトラブルが発生します。

だから、ユーザー環境を壊さないためにも必須です。


Application.EnableEvents の役割

EnableEvents = False がしていること

Application.EnableEvents = False

これは、イベントマクロを無効化する設定です。

イベントとは、次のようなものです。

  • Worksheet_Change
  • SelectionChange
  • Workbook_Open

例えば、

  1. VBAでセルを書き換える
  2. Worksheet_Change が発動
  3. その中でさらにセルを書き換える

このような処理をすると、

  • 無限ループ
  • 処理が極端に遅くなる

といった問題が起こります。

EnableEventsをFalseにすると、
マクロ実行中にイベントが発動しなくなります


EnableEvents = True を戻さないと起きる問題

Application.EnableEvents = True

これを忘れると、

  • イベントマクロが一切動かない
  • 「昨日まで動いてたのに…」状態

になります。

これは、トラブル率が非常に高いポイントです。


高速化の三種の神器まとめ

設定止めているもの効果
ScreenUpdating画面更新体感速度アップ
Calculation数式再計算処理時間短縮
EnableEventsイベント無限ループ防止

実務で使う鉄板テンプレート

Sub Sample()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    ' メイン処理を書く

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

End Sub

この形を基本形として覚えておくと、
どんなマクロでも安定して高速化できます。


エラー対策も含めた安全な書き方

実務では、途中でエラーが出ることもあります。
その場合に備えて、必ず復帰処理を書くのがおすすめです。

Sub Sample()

    On Error GoTo ExitHandler

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False

    ' メイン処理

ExitHandler:
    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True

End Sub

これができると「実務で信頼されるVBA」により近づきます。


まとめ

Excel VBAの処理が遅いと感じたら、まず見直すべきなのは以下の3点です。

  • 画面更新(ScreenUpdating)
  • 再計算(Calculation)
  • イベント処理(EnableEvents)

これらを正しく理解して使うことで、

  • 処理速度が大幅に向上
  • 無限ループやトラブルを回避
  • 実務で安心して使えるマクロ

を作ることができます。

VBAで大量データや複雑な処理を行う場合は、
必ずこの高速化設定をセットで使うようにしましょう。

コメント

タイトルとURLをコピーしました