【入門編】【初心者向け】置換後の文字列に「現在適用されているフォント設定」を自動継承させる方法 – Word VBA解析バイブル

スポンサーリンク

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の検索エンジンは、あなたの命令一つで、どれだけ複雑な文書でも一瞬で書き換えてくれます。

また何か壁にぶつかったら、いつでもここに戻ってきてくださいね。あなたの自動化の旅を、心から応援しています!

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