Word VBAの神髄:文字列ではなく「書式」を狩る!置換の極意を伝授します
こんにちは。現場の最前線でWordの自動化と戦い続けているエンジニアです。
皆さんは、Wordの校正作業でこんな悩みを抱えたことはありませんか?
「赤字で修正した箇所だけを、一括で特定のスタイルに変えたい」
「太字になっている特定の語句だけを、別のフォントに差し替えたい」
手作業で一つずつ探していては、日が暮れてしまいますよね。マクロの記録で生成されたコードを見て「なんだか複雑で難しそう……」と挫折した方もいるかもしれません。
今回は、Word VBAの検索・置換機能の「真の姿」を解き明かします。文字列の内容は無視し、フォントや色といった「書式」だけをターゲットにする。このテクニックをマスターすれば、あなたの校正作業は魔法のように効率化されます。
—
1. なぜ「Findオブジェクト」は気難しいのか?
Word VBAの検索・置換の核となるのが `Find` オブジェクトです。多くの初心者がここでつまずく理由は、「検索の設定がメモリ上に残り続ける」という特性を知らないことにあります。
VBAの検索は、一度設定を行うと、その設定が次に実行するコードにも引き継がれます。前回の検索条件がゴミとして残っていると、意図しない場所まで置換されてしまう……これが「VBAが動かない(または暴走する)」最大の原因です。
この「呪い」を解くための黄金律はこれです。
> 「検索を始める前にリセットし、終わったらクリアする」
—
2. 【実践】書式だけを検索・置換するコード
では、実際に「赤色の文字」を「太字に変更する」というマクロを見ていきましょう。
Sub ReplaceFormatOnly()
‘ 検索と置換のオブジェクトを定義
Dim rng As Range
Set rng = ActiveDocument.Content ‘ 文書全体を対象にする
‘ 1. 検索・置換設定を初期化(ここが最重要!)
rng.Find.ClearFormatting
rng.Find.Replacement.ClearFormatting
‘ 2. 検索条件の設定:フォントの色が「赤」
With rng.Find
.Text = “” ‘ 文字列は指定しない(空にすることで「何でもいい」になる)
.Font.Color = wdColorRed
‘ 3. 置換後の設定:太字にする
.Replacement.Text = “^&” ‘ ^& は「検索で見つかった文字列そのもの」を指す
.Replacement.Font.Bold = True
‘ 4. 置換の実行
.Forward = True
.Wrap = wdFindContinue
.Format = True ‘ 重要:書式を検索対象にするフラグ
.Execute Replace:=wdReplaceAll
End With
‘ 5. 後始末:設定をクリアして次に影響を残さない
rng.Find.ClearFormatting
rng.Find.Replacement.ClearFormatting
MsgBox “赤字の箇所をすべて太字に変換しました。”
End Sub
—
3. コードの「ここがポイント」を解説
初学者が必ず理解しておくべき重要なポイントを3つだけ挙げます。
- `.Text = “”` の意味
文字列を空にすると、Wordは「文字は何でもいいから、書式だけが一致するもの」を探しに行きます。これが「内容無視」の正体です。
- `Replacement.Text = “^&”` の意味
`^&`(キャレット+アンパサンド)は、「見つかった文字をそのまま維持する」という特殊コードです。これを使わないと、文字自体が消滅してしまうので注意してください。
- `.Format = True` の重要性
この一行を忘れると、Wordは「書式情報」を無視して検索してしまいます。書式をいじる際は、必ずこのフラグを立ててください。
—
4. 陥りやすい「落とし穴」への警告
初心者がよくやる失敗が「検索条件のリセット忘れ」です。
もし `ClearFormatting` を忘れると、一度実行した「赤文字を探す」という条件が、次に別のマクロを実行したときにも残ってしまいます。Wordを再起動するまでその条件が生き続けるため、「なぜか他のマクロが動かない!」という事態に陥ります。
「使い終わったらきれいにする」。この礼儀正しいコーディングこそが、バグを生まないエンジニアの第一歩です。
—
終わりに:自動化の先にある世界へ
今回紹介した「書式の置換」ができるようになると、校正作業の自動化レベルは一気に跳ね上がります。フォントサイズ、色、スタイル、段落設定……これらを自在に扱えるようになれば、Wordは単なる文書作成ツールから、強力なデータ処理エンジンへと変貌します。
まずはこのコードをコピーして、適当なWordファイルで試してみてください。自分の書いたコードで画面上の文字が一瞬にして変わる瞬間、きっとVBAの本当の楽しさが分かるはずです。
ここをクリアしたあなたは、もう初心者ではありません。次回の記事では、正規表現を組み合わせて「もっと複雑な条件」で検索する方法を解説します。
それでは、素晴らしい自動化ライフを!
