【入門編】【中級者向け】ワイルドカード検索で「特定の単語の直前にある単語」を入れ替える高度な置換 – Word VBA解析バイブル

スポンサーリンク

Word VBAの神髄:ワイルドカードで「入れ替え」を瞬殺する極意

こんにちは。自動化の現場で血と汗を流してきたエンジニアです。
これまでWordの「置換」画面で、何度も同じ修正を繰り返して時間を溶かしていませんか?

「マクロの記録」から一歩踏み出し、WordのFindオブジェクトが持つ真の力「ワイルドカード」と「グループ化」を掌握すれば、複雑な文字列操作は一瞬で終わります。

今日は、中級者への登竜門として「逆転している単語を正しい順序に入れ替える」という、実務で頻出するテクニックを伝授します。ここをクリアすれば、あなたはもう「VBAで遊んでいる」レベルから「業務をハックしている」エンジニアへと昇華します。

—

1. なぜ「ワイルドカード」なのか?

通常の検索・置換は「AをBにする」だけの単純作業ですが、Wordのワイルドカードは違います。「パターンを認識し、その一部を抜き出して再配置する」という、極めて高度な処理が可能です。

今回のミッション

例えば、誤って「姓 名」と書くべきところを「名 姓」と書いてしまったリストがあるとします。

  • Before: `太郎 山田`
  • After: `山田 太郎`

これを1つずつ手作業で直すのは地獄です。ワイルドカードの「グループ化」を使えば、一括で修正できます。

—

2. 魔法の記号:カッコ `()` と 参照 `\n`

ワイルドカードでの入れ替えには、以下の2つのルールだけ覚えてください。

1. グループ化する: 抽出したい単語を `(` と `)` で囲む。
2. 参照する: 置換後の文字列で、順番通りに `\1`, `\2` と指定する。

検索対象を「1つ目のグループ」と「2つ目のグループ」に分け、置換側でその番号を入れ替えるイメージです。

—

3. 実践!Word VBAコード

では、この理論をVBAに落とし込みましょう。オブジェクトのライフサイクルを意識し、`Range`オブジェクトを使って文書全体をスマートに処理します。

Sub SwapNames()
‘ 文書全体のRangeを取得(選択範囲に依存しない堅牢な設計)
Dim rng As Range
Set rng = ActiveDocument.Content

With rng.Find
.ClearFormatting ‘ 前回の検索設定をリセット(必須)
.Replacement.ClearFormatting

‘ 検索パターン:スペース区切りの2単語
‘ ([! ]@) は「スペース以外の文字の集まり(グループ1)」
‘ ([! ]@) は「スペース以外の文字の集まり(グループ2)」
.Text = “([! ]@) ([! ]@)”

‘ 置換後のパターン:グループ2とグループ1を入れ替える
‘ \2 は2番目のグループ、\1 は1番目のグループ
.Replacement.Text = “\2 \1”

‘ ワイルドカードを有効にする
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchByte = False
.MatchAllWordForms = False
.MatchSoundsLike = False
.MatchWildcards = True ‘ これが魔法のスイッチ

‘ 一括置換を実行
.Execute Replace:=wdReplaceAll
End With

MsgBox “入れ替え完了!”, vbInformation
End Sub

—

4. 陥りやすいエラーと回避策

初心者が必ずハマるポイントが3つあります。ここを避けるのが「できるエンジニア」の条件です。

  • 「前回の設定」を引きずらない:

`ClearFormatting` を忘れると、以前の検索で設定した「太字」や「赤色」などの条件が残り、意図した場所がヒットしません。常にリセットの癖をつけましょう。

  • ワイルドカードの「@」を過信するな:

`@` は「1回以上の繰り返し」ですが、日本語環境では “(任意の文字列)と混同しやすいです。日本語の場合は `[! ]@`(スペース以外の文字列)のように、「何を除外するか」を明示すると動作が安定します。

  • 実行前に「手動」で試す:

いきなりマクロを走らせず、一度Wordの置換画面でこの検索文字列を入力し、「すべて置換」が期待通り動くか確認してください。ロジックのデバッグは、まずUI上で行うのが鉄則です。

—

まとめ:あなたはもう自動化の入り口に立っている

今回の手法を習得すれば、日付の並び替え(yyyy/mm/dd → dd/mm/yyyy)や、括弧内の順序入れ替えなど、応用範囲は無限大です。

Word VBAは「文書という構造体」を操作する、非常に強力な武器です。今回のような「グループ化置換」を使いこなせるようになれば、マクロの記録が生成する冗長なコードからは卒業です。

さあ、次はどんな面倒な作業を自動化しましょうか?
何か行き詰まったら、いつでもここに戻ってきてください。応援しています。

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