【Word VBA】文字列ではなく「書式」を狩れ。Findオブジェクトを完全制覇する極意
Word VBAにおける`Find`オブジェクト。多くの初心者は「特定の文字列を探すための道具」と誤解している。だが、実務の現場で真に求められるのは、「赤字の箇所」や「特定のスタイルが適用された箇所」を特定し、一括で制御する力だ。
文字列の内容など無意味だ。重要なのは「文書内に散らばった意図しない書式のノイズ」をいかに検出し、排除・変換するかである。今日は、書式指定による検索・置換の設計思想と、現場で「絶対にバグらせない」ための作法を伝授する。
—
1. なぜ「書式検索」がプロの必須スキルなのか
ドキュメントの校正において、手作業でフォントや色を確認するのは時間の浪費である。例えば「強調のために赤字にした箇所を、すべて太字に変更し、黒に戻す」といった作業。これを手動で行うのは、Excelの数式を電卓で検算するのと同じくらい非効率だ。
Word VBAにおいて書式検索をマスターすれば、「構造の強制」が可能になる。ドキュメントの品質は、人間に依存させるのではなく、コードによって担保すべきだ。
—
2. 破壊的な失敗を避ける「Findオブジェクト」の鉄則
Wordの`Find`オブジェクトは非常に癖が強い。特に注意すべきは、「一度検索を行うと、その設定がWordのメモリ内に永続的に残る」という点だ。
初心者がよくやる間違いは、設定をリセットせずに次の処理へ進むこと。これにより、意図しない条件下で検索が走り、文書が破壊される。以下のコードは、現場で私が採用している「安全な検索のテンプレート」だ。
実践的:書式指定による置換コード
‘ ———————————————————
‘ 指定した書式(赤字)を検索し、太字に変換して黒に戻す
‘ ———————————————————
Sub ReplaceFormattingRobustly()
Dim rng As Range
Set rng = ActiveDocument.Content
‘ 1. 検索環境の初期化(ここが最重要)
With rng.Find
.ClearFormatting ‘ 前回の検索条件をすべてクリア
.Replacement.ClearFormatting
‘ 2. 検索対象の書式を設定(例:赤字)
.Font.Color = wdColorRed
‘ 3. 置換後の書式を設定(例:太字かつ黒)
.Replacement.Font.Bold = wdToggle
.Replacement.Font.Color = wdColorBlack
‘ 4. 実行設定
.Text = “” ‘ 文字列指定なし(書式のみ)
.Replacement.Text = “” ‘ 置換後の文字列も変更なし
.Forward = True
.Wrap = wdFindContinue
.Format = True ‘ 書式検索を有効化
‘ 5. 一括置換の実行
.Execute Replace:=wdReplaceAll
End With
‘ 6. 検索条件の完全な破棄(後続の処理への汚染を防ぐ)
rng.Find.ClearFormatting
MsgBox “書式の再構成が完了しました。”, vbInformation
End Sub
—
3. なぜこの設計が「堅牢」なのか
このコードには、エンジニアとしての「守り」の設計が組み込まれている。
- `ClearFormatting` の徹底: 検索前後の二重掛け。これを怠ると、前回の「太字検索」の設定が残ったまま次のプログラムが動くという、デバッグ地獄を招く。
- `wdFindContinue` と `Range` の活用: `Selection` オブジェクトを直接操作しないこと。`Selection`はカーソル位置に依存するため、実行のたびに画面が激しく点滅し、パフォーマンスが著しく低下する。`Range`オブジェクトをメモリ上で操作するのが、高速かつスマートなやり方だ。
- `Format = True` の明示: これを忘れると、いくらフォント設定を記述してもWordは無視する。書式検索のスイッチである。
—
4. プロの現場での応用:正規表現との組み合わせ
Wordの標準Findは高度だが、複雑なパターンには正規表現が欲しくなる。その場合、私はWordの「ワイルドカード」を活用するか、あるいはWordを一度HTML/XMLとして書き出し、VB.NETやPythonでパースして処理を行う。
しかし、Word VBAだけで完結させるなら、「まずは書式で該当箇所を特定し、そのRange範囲に対して正規表現で文字列を微調整する」という二段構えが最も保守性が高い。
—
結論:自動化は「信頼」である
業務自動化ツールを作るということは、「あなたのコードが、人間以上に正確に文書を理解できる」ことを証明することだ。
今回紹介した「書式検索」は、単なる機能ではない。文書の中に潜む「ゆらぎ」をコードで排除するための強力な武器だ。まずは、このテンプレートをコピーし、手元の文書の「赤字」や「ハイライト」を自由自在に操ってみてほしい。
それができれば、あなたは次のステージ、すなわち「ドキュメントの構造化」というより深い領域へ進む準備が整ったということだ。頑張れ。コードは裏切らない。
