【VBAリファレンス|実務向け】マクロ実行時の「画面チラつき」を抑えて高速化するテクニック

スポンサーリンク

なぜこの技術が重要なのか

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(イベントの無効化)」を組み合わせることで、より実務に耐えうる高速なプログラムを作成できます。

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