なぜこの技術が重要なのか
Excel VBAでマクロを組む際、セルを選択したり、シートを切り替えたりする動作をそのまま実行すると、画面が激しく点滅(チラつき)してしまいます。これは見た目が悪いだけでなく、マクロの処理速度を著しく低下させる大きな原因となります。実務で大量のデータを処理する場合、この「画面更新の停止」は必須のテクニックです。
基礎知識:ScreenUpdatingプロパティとは
Excel VBAには、画面の更新を制御するApplication.ScreenUpdatingというプロパティが用意されています。
このプロパティを「False」に設定すると、マクロ実行中の画面再描画が一時的に停止されます。これにより、Excelは画面を書き換えるためのリソースを節約でき、結果として処理が高速化されるのです。作業が終わったら必ず「True」に戻すのが鉄則です。
実装のポイント
実装の手順は非常にシンプルです。
1. マクロの冒頭で「Application.ScreenUpdating = False」を実行する。
2. マクロの末尾(End Subの直前)で「Application.ScreenUpdating = True」を実行して画面更新を再開させる。
この2行を挟むだけで、ユーザーには結果だけが瞬時に表示されるようになり、プロフェッショナルなツールへと一歩近づきます。
サンプルプログラム
以下のコードは、大量のデータに対して値を書き込む際に画面更新を止める例です。
Sub FastProcessExample()
' マクロ実行中の画面更新を停止して高速化する
Application.ScreenUpdating = False
' エラーが発生しても画面更新が停止したままにならないよう、
' 実務ではOn Error GoTo構文を併用するのが理想的です
On Error GoTo ErrorHandler
Dim i As Long
' サンプルとして10000行に値を入力
For i = 1 To 10000
Cells(i, 1).Value = "データ" & i
Next i
' 処理終了後、必ず画面更新を再開させる
Application.ScreenUpdating = True
Exit Sub
ErrorHandler:
' エラー発生時も画面更新を戻す
Application.ScreenUpdating = True
MsgBox "エラーが発生しました。"
End Sub
応用・注意点
1. 必ず「True」に戻すこと
マクロの途中でエラーが発生し、プログラムが強制終了すると「False」のままになり、Excelの画面が動かなくなることがあります。上記のサンプルコードのように、On Error GoToを使用して、エラー時でも必ず「True」に戻る処理を組み込むのがベテランの作法です。
2. 処理結果を見せたい場合
進捗状況をユーザーにプログレスバー等で示したい場合は、画面更新を止めてしまうとバーが動かないため注意が必要です。その場合は、一定回数ごとにScreenUpdatingをON/OFFするなどの工夫が必要になります。
3. 他の高速化との併用
さらに速度を求めるなら「Application.Calculation = xlCalculationManual(自動計算の停止)」や「Application.EnableEvents = False(イベントの無効化)」を組み合わせることで、より実務に耐えうる高速なプログラムを作成できます。
