Word VBAの「置換」で書式が崩壊する原因、そして「真の継承術」を伝授します
こんにちは。自動化の世界へようこそ。
Word VBAで「検索と置換」を自動化しようとすると、多くの初心者が最初にぶつかる壁があります。それが「置換すると、元のフォントや太字設定がすべて消えて、標準スタイルに戻ってしまう」という現象です。
「マクロの記録」で生成されたコードをそのまま使っていませんか?
実は、Wordの`Find.Replacement`オブジェクトは、デフォルトでは「書式をリセットする」という仕様になっています。今回は、この仕様を正しく掌握し、元の書式を維持したまま文字だけをスマートに入れ替える技術を解説します。
—
なぜ書式がリセットされるのか?(ここが重要)
Wordの検索・置換エンジンは、実は非常に強力ですが、その分「設定」に忠実です。
VBAで `Replacement.Text` を設定しただけだと、Wordは「置換後の文字列は、デフォルトの書式で出力せよ」という命令として受け取ってしまいます。
これを回避し、「元の書式を継承」させるための鍵は、`Replacement.ClearFormatting` というメソッドの使い方にあります。
—
解決策:書式を「クリアしない」という選択
以下のコードを見てください。これが、プロの現場でも使われる「書式を維持する置換」の基本形です。
Sub ReplaceKeepFormatting()
Dim rng As Range
Set rng = ActiveDocument.Content ‘ 文書全体を対象にする
‘ 検索と置換の設定をリセット(重要:ゴミ設定を残さない)
rng.Find.ClearFormatting
rng.Find.Replacement.ClearFormatting
‘ ここが極意:Replacement.ClearFormatting を実行した後に、
‘ 「何も書式を指定しない」ことで、Wordは「置換前の書式をそのまま保持」します。
With rng.Find
.Text = “置換前の文字列” ‘ 探したい文字
.Replacement.Text = “置換後の文字列” ‘ 新しい文字
.Forward = True
.Wrap = wdFindContinue
.Format = False ‘ 重要:書式検索を行わない設定
.MatchCase = False ‘ 大文字小文字を区別しない
‘ 置換実行(ReplaceAllで一括処理)
.Execute Replace:=wdReplaceAll
End With
MsgBox “書式を維持したまま、置換が完了しました!”
End Sub
コードのポイント解説
1. `rng.Find.Replacement.ClearFormatting`: これを呼び出すと、置換後の「書式設定」がまっさらになります。あえて「何も指定しない」ことで、Wordは「置換前と同じ書式を引き継ぐ」という挙動をとるのです。
2. `.Format = False`: ここを `True` にしてしまうと、「書式を探す」モードになり、文字以外の属性(色やサイズ)まで指定しないと置換できなくなります。今回は「文字だけ変えたい」ので `False` が正解です。
—
陥りやすいエラーと回避策
エラー1:特定の箇所だけ書式が変わってしまう
もし、特定の単語だけが置換後にフォントが変わってしまう場合、その単語に「スタイル」が適用されている可能性があります。
その場合は、置換する前に `Selection` ではなく `Range` オブジェクトを使い、対象を明示的に指定することで、予期せぬ書式の混入を防ぐことができます。
エラー2:置換した場所だけ「太字」が解除される
これは `Replacement.Text` に文字列を代入する際、VBAの内部でテキスト形式がクリアされることが原因です。この場合、コード内で書式を明示的に指定する「プロフェッショナルな手法」が必要です。
‘ 参考:明示的に書式を引き継ぐ場合
With rng.Find.Replacement
.Font.Bold = wdToggle ‘ 現在の太字設定をトグルさせる、など
End With
—
初心者から一歩先へ:次のステップ
このコードをマスターすれば、もう「置換のたびに書式を再設定する」という苦行からは解放されます。
Word VBAにおいて最も大切なのは、「オブジェクト(Range)をどう制御するか」です。マクロの記録はあくまで「ヒント」に過ぎません。今回学んだ `ClearFormatting` と `Format = False` の組み合わせは、Word自動化の要石(かなめいし)です。
ここをクリアしたあなたは、もう初心者ではありません。
次は「特定のフォントだけを検索して、別のフォントに置換する」という応用にも挑戦してみてください。Wordの検索エンジンは、あなたの命令一つで、どれだけ複雑な文書でも一瞬で書き換えてくれます。
また何か壁にぶつかったら、いつでもここに戻ってきてくださいね。あなたの自動化の旅を、心から応援しています!
