【入門編】パフォーマンスを劇的に改善する:ScreenUpdatingとDisplayAlertsの正しい制御 – Word VBA解析バイブル

スポンサーリンク

Word VBAのパフォーマンスを極める:画面描画を支配し、マクロを「高速化」する極意

こんにちは。現場で「マクロの記録」から一歩先へ進もうとしている皆さん、素晴らしい挑戦です。

Word VBAを書き始めると、誰もが一度はぶつかる壁があります。それは「処理が遅い」「画面がチカチカして酔いそうになる」「途中で警告が出て止まってしまう」という悩みです。

これらは単なるプログラムの不具合ではありません。Wordという「巨大なアプリケーション」を、VBAという「操縦席」からどう制御するか、その作法を知らないだけなのです。今日は、プロのエンジニアが必ず実装する「処理速度と安定性を劇的に高める鉄則」を伝授します。

なぜマクロは「遅く」なるのか?

WordのVBAは、基本的には「人間がマウスやキーボードで行う操作」をエミュレートします。つまり、プログラムが一文字入力するたびに、Wordは律儀に画面を再描画し、レイアウト計算を行い、スペルチェックを走らせているのです。

100ページあるドキュメントで、全ての行を置換する処理を想像してください。Wordは100回、律儀に画面を更新します。これでは時間がかかって当然ですよね。

この「無駄な重労働」を止める魔法のコマンドが、`ScreenUpdating` と `DisplayAlerts` です。

劇的な高速化をもたらす「2つの守護神」

まずは、どんなマクロでも必ず書くべき「黄金の雛形」を見てください。

Sub MasterTemplate()
‘ — 処理開始 —
‘ 1. 画面描画を停止(これだけで速度が数倍〜数十倍になる)
Application.ScreenUpdating = False
‘ 2. 警告メッセージを抑制(「保存しますか?」等のダイアログを無視)
Application.DisplayAlerts = wdAlertsNone

On Error GoTo ErrorHandler ‘ エラー発生時の安全装置

‘ — ここにメインの処理を記述 —
‘ 例:全置換など重い処理
ActiveDocument.Range.Find.Execute FindText:=”旧語”, ReplaceWith:=”新語”, Replace:=wdReplaceAll

‘ — 処理終了 —
Cleanup:
‘ 忘れずに戻すことが「伝説のエンジニア」への第一歩
Application.ScreenUpdating = True
Application.DisplayAlerts = wdAlertsAll
Exit Sub

ErrorHandler:
‘ エラーが起きた時も設定を元に戻さないと、Wordが操作不能になります
MsgBox “エラー発生: ” & Err.Description
Resume Cleanup
End Sub

1. Application.ScreenUpdating = False

これが「画面更新停止」です。これを `False` にすると、Wordは裏側で計算だけを行い、画面の再描画を完全にストップします。処理完了後に `True` に戻した瞬間、結果だけがパッと反映される。これがプロの高速化です。

2. Application.DisplayAlerts = wdAlertsNone

マクロ実行中に「読み取り専用です」「ファイルを上書きしますか?」といった警告が出るたびに、マクロは人間がボタンを押すのを待機して停止します。これを `wdAlertsNone` にすることで、全て「自動的にOK/キャンセル」を判断させ、無停止での完走を実現します。

陥りやすい「罠」:復旧の義務

初心者が最もやってはいけないミス。それは、`ScreenUpdating = False` にしたままエラーでマクロが終了することです。

もし途中でエラーが起きて `True` に戻す行がスキップされたらどうなるか?
Wordは画面を更新しないままフリーズしたように見え、ユーザーは何も操作できなくなります。これを防ぐのが、コード内の `ErrorHandler:` (エラーハンドラ)です。

  • `On Error GoTo ErrorHandler`: 何か起きたら、強制的に「後処理(Cleanup)」へ飛ぶ。
  • `Cleanup:`: どんな結果であれ、必ず設定を元に戻すための帰還ポイント。

この「必ず戻す」という責任感こそが、堅牢なシステムを構築するエンジニアの矜持です。

ここをクリアすれば、あなたはもう中級者です

今回紹介した技術は、単なる小手先のテクニックではありません。「アプリケーションの状態を管理する」という、プログラミングにおける最も重要な概念の一つです。

  • 処理の前に設定を「オフ」にする
  • エラーが起きても必ず「オン」に戻す

この「サンドイッチ構造」を癖づけてしまえば、皆さんが作るマクロは、驚くほど軽快で、そして安定したものに変わるはずです。

Word VBAの世界は深く、そして強力です。まずはこの「守りの作法」を身につけて、快適な自動化ライフを楽しんでくださいね。次回の記事では、`Range`オブジェクトを自由自在に操り、さらに処理を最適化する「メモリとの付き合い方」についてお話ししましょう。

それでは、また現場でお会いしましょう!

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