VBAのマクロが遅いと感じたら、まず「画面更新の停止」「自動計算の停止」「警告の停止」の3つを試してみましょう。処理の最初に停止して最後に元に戻すだけで、体感できるほど速くなることがあります。
この記事では、次の内容を順番に解説します。
- 画面更新を停止する方法(ScreenUpdating)
- 自動計算を停止する方法(Calculation)
- 警告メッセージを停止する方法(DisplayAlerts)
- 3つをまとめて使うときの書き方
画面更新を停止するには?
マクロが動いている間、Excelは画面を毎回更新しようとします。これが処理を遅くする原因の一つです。ScreenUpdating = False で画面更新を止めると、その分だけ処理が速くなります。
Application.ScreenUpdating = False
' ここに処理を書く
Application.ScreenUpdating = True ' 必ず元に戻す
処理中の画面のチラつきもなくなるので、ユーザーへの見た目も改善されます。ただし処理の途中経過を画面で確認したい場合は使わないようにしましょう。
自動計算を停止するには?
シートに関数(SUM・VLOOKUPなど)が多いと、セルを変えるたびに再計算が走って処理が遅くなります。Calculation = xlCalculationManual で手動計算に切り替えると、処理中の無駄な再計算を防げます。
Application.Calculation = xlCalculationManual
' ここに処理を書く
Application.Calculation = xlCalculationAutomatic ' 必ず元に戻す
注意点として、マクロの中で関数の計算結果を使う処理がある場合は、停止前の古い値が使われてしまいます。関数の結果に依存する処理がある場合は、その箇所だけ xlCalculationAutomatic に戻してから処理を進めましょう。
警告メッセージを停止するには?
シートを削除するなどの操作をすると「本当に削除しますか?」という確認ダイアログが表示されます。マクロの中でこれが出ると処理が止まってしまうので、DisplayAlerts = False で非表示にできます。
Application.DisplayAlerts = False
' ここに処理を書く(シートの削除など)
Application.DisplayAlerts = True ' 必ず元に戻す
警告を止めると操作が自動で「はい」として進むので、本当に削除してよいか確認できなくなります。使う場面を限定して、処理後は必ず元に戻してください。
3つをまとめて使うときの書き方は?
3つの設定をまとめて使う場合は、処理の最初にまとめて停止して、最後にまとめて元に戻します。
Sub FastMacro()
' 処理前に停止する
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.DisplayAlerts = False
' ここに処理を書く
' 処理後に元に戻す
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.DisplayAlerts = True
End Sub
元に戻す処理を書き忘れると、マクロが終わった後もExcelの動作がおかしくなることがあります。セットで書く習慣をつけましょう。
まとめ
- ScreenUpdating = False:画面更新を止める。処理中のチラつきもなくなる。
- Calculation = xlCalculationManual:自動計算を手動に切り替える。関数が多いシートで効果大。
- DisplayAlerts = False:警告ダイアログを非表示にする。シート削除などの操作が止まらなくなる。
- 必ず元に戻す:3つとも処理後に
TrueまたはxlCalculationAutomaticに戻す。
よくある質問
元に戻す処理を書き忘れたままExcelを使うとどうなる?
ScreenUpdatingがFalseのままだと画面が更新されなくなり、CalculationがxlCalculationManualのままだと関数が再計算されなくなります。おかしいと感じたらVBAの編集画面(Alt+F11)のイミディエイトウィンドウで Application.ScreenUpdating = True などを手動で実行すると戻せます。
マクロがエラーで止まったとき、停止設定が元に戻らない場合は?
エラーで途中終了すると元に戻す処理が実行されないことがあります。対策として On Error GoTo ErrHandler でエラー処理を設定して、エラーが起きた場合でも必ず元に戻す処理が走るようにしておくと安全です。
3つ以外にも速くする方法はある?
あります。①Selectを使わずにシートやセルを直接指定する、②ループの中でのセルへの書き込みを配列にまとめて一括書き込みにする、③不要なシートや範囲を処理対象から外す、などが代表的な方法です。
DisplayAlertsをFalseにすると全ての警告が消える?
Excelが表示する確認ダイアログや警告メッセージが非表示になります。ただしVBAのエラーメッセージは消えません。また、警告が消えると誤って重要なデータを削除してしまうリスクがあるので、使う場面を絞って使いましょう。
処理速度を数値で確認したい場合は?
Timer関数を使うと処理時間を計測できます。startTime = Timer で開始時刻を記録して、処理後に MsgBox Timer - startTime & "秒" と書くと何秒かかったかを確認できます。改善前後を比べると効果を実感しやすいです。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



