導入:なぜマクロ実行中に画面を固定するのか
VBAで大量のデータを処理する際、マクロが実行されるたびに画面がパチパチと切り替わったり、計算結果が逐次更新されたりするのを目にしたことはありませんか?これは単に見栄えが悪いだけでなく、Excelがその都度「画面描画」を行うため、処理速度が大幅に低下する原因になります。今回は、VBAで最も重要かつ即効性のある高速化テクニック「画面更新の停止」について解説します。
基礎知識:Application.ScreenUpdatingとは
Excel VBAには、アプリケーションの制御を行うための「Applicationオブジェクト」というものがあります。その中にあるScreenUpdatingプロパティは、画面描画を制御するスイッチのようなものです。
これを「False(オフ)」にすることで、マクロ実行中の画面更新を停止させ、完了後に「True(オン)」に戻すことで、劇的にマクロの動作速度を向上させることができます。
実装/解決策:処理の前後でスイッチを切り替える
ポイントは、処理の「前」にオフにし、処理の「後」に必ずオンに戻すことです。もしエラー等で処理が中断されてもオンに戻るように、後述するエラーハンドラと組み合わせるのが実務での鉄則です。
サンプルプログラム:画面更新を停止して高速化する例
以下のコードは、大量のデータへ書き込みを行う際、画面更新を止めて効率的に処理するテンプレートです。
Sub 高速処理テンプレート()
‘ 画面更新を停止して処理速度を向上させる
Application.ScreenUpdating = False
‘ ステータスバーに現在の状況を表示するのもプロの技
Application.StatusBar = “処理を実行中です。しばらくお待ちください…”
On Error GoTo ErrorHandler ‘ エラー発生時の備え
‘ — ここにメインの処理を記述 —
Dim i As Long
For i = 1 To 10000
Cells(i, 1).Value = “テストデータ” & i
Next i
‘ ——————————
ExitHandler:
‘ 処理終了後、必ず画面更新を有効に戻す
Application.ScreenUpdating = True
Application.StatusBar = False
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました。”
Resume ExitHandler
End Sub
応用・注意点:現場で陥りやすい落とし穴
1. 戻し忘れに注意
もし何らかの理由でコードが途中で止まってしまい、Application.ScreenUpdating = True が実行されないと、Excelの画面がフリーズしたかのように更新されなくなります。その場合は、イミディエイトウィンドウで「Application.ScreenUpdating = True」と入力して実行すれば直りますが、実務では必ずエラー処理を組み込んでください。
2. ユーザーへのフィードバック
画面を止めてしまうと、ユーザーは「マクロが動いているのか、止まっているのか」が分からなくなります。上記のコードのように、Application.StatusBar(Excel画面左下のステータスバー)にメッセージを表示させるか、進捗をユーザーに伝える工夫をすると、より親切なツールになります。
たったこれだけの記述で、マクロのプロっぽさが一段と増します。ぜひ次回の開発から取り入れてみてください。
