Word VBAの真髄:`Find.Execute`を操り、文書の「意思」を読み解く
こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの長さに絶望したことはありませんか?
Word VBAにおいて、`Find`オブジェクトを使いこなすことは、単なる「検索」以上の意味を持ちます。それは、Wordという巨大な文書構造に対して、「君はどこに何を隠しているんだい?」と直接対話するスキルなのです。
今日は、ただ置換するだけではない、「検索で見つかったら通知する」というステップアップ検索を通じて、VBAの本質に触れていきましょう。
—
1. なぜ「検索」が重要なのか?
自動化の第一歩は「判断」です。「もし〇〇という単語があったら、処理を分岐させる」。この判断力を身につけるだけで、あなたのマクロは『ただの作業員』から『賢いアシスタント』へと進化します。
Word VBAにおける検索の要は、`Range`オブジェクトと`Find`オブジェクトの連携にあります。
—
2. 検索の基本構文:Find.Executeの魔法
まずは、最もシンプルかつ強力な検索コードを見てみましょう。
Sub FindKeywordNotice()
Dim rng As Range
Set rng = ActiveDocument.Content ‘文書全体を対象にする
‘ 検索条件の設定と実行
With rng.Find
.ClearFormatting ‘ 以前の検索条件をクリア(これ重要!)
.Text = “重要事項” ‘ 探したい言葉
.Forward = True ‘ 文書の先頭から末尾に向かって検索
.Wrap = wdFindStop ‘ 文末まで行ったら停止
‘ .Executeは検索を実行し、成功すればTrueを返す
If .Execute = True Then
MsgBox “「” & .Text & “」が見つかりました!”
rng.Select ‘ 見つかった場所にカーソルを移動
Else
MsgBox “該当するキーワードは見つかりませんでした。”
End If
End With
End Sub
このコードの「魂」となるポイント
1. `.ClearFormatting` を忘れないこと
これが初心者の方が最も陥りやすい罠です。直前の検索で「太字の文字」を探していた場合、その設定が残っていると、次の検索で「太字ではない該当単語」が無視されます。必ず初期化する癖をつけましょう。
2. `rng` は「ポインタ」である
`rng.Find` を実行すると、`rng` 自体が「見つかった単語の場所」に移動します。つまり、検索に成功した瞬間、`rng` はその単語を抱きかかえた状態になるのです。
3. `.Wrap` の設定
`wdFindStop`(停止)を使うのが安全です。これを`wdFindContinue`にすると、文書の最後でループしてしまい、無限地獄に陥る可能性があるからです。
—
3. 次のステップ:すべてを見つけ出す「ループ処理」
一度だけ見つけて終わり、では物足りませんよね。文書内に散らばる「重要事項」をすべて見つけ出したい場合は、`Do While` ループを使います。
Sub FindAllKeywords()
Dim rng As Range
Set rng = ActiveDocument.Content
Dim count As Integer
count = 0
‘ 文書全体を検索
With rng.Find
.ClearFormatting
.Text = “重要事項”
‘ ループで次々と検索を続ける
Do While .Execute = True
count = count + 1
‘ 見つかった場所をハイライト(背景色を黄色に)
rng.HighlightColorIndex = wdYellow
Loop
End With
MsgBox “合計 ” & count & ” 件の「重要事項」をマークしました。”
End Sub
なぜこれでループするのか?
`rng.Find.Execute` は、呼び出されるたびに「次の対象」へと `rng` の範囲を更新します。`Do While` と組み合わせることで、文書の果てまで旅をするロジックが完成するのです。
—
4. 初心者がハマる「落とし穴」と対策
現場でコードを書いていると、必ず以下のエラーに直面します。
- 「オブジェクトが必要です」というエラー
→ `Set rng = …` を忘れていませんか? `rng` はただの変数ではなく、Wordの「場所」を指し示すオブジェクトです。
- 検索が無限に終わらない
→ 先述の通り、`.Wrap` を見直してください。`wdFindContinue` は強力ですが、制御を誤るとWordをフリーズさせます。
- 検索結果がズレる
→ `rng` を更新する際、`rng.Collapse Direction:=wdCollapseEnd` を使うと、「見つかった単語の直後」から検索を再開できます。検索漏れを防ぐための重要なテクニックです。
—
最後に:エンジニアとしての一歩
ここまで読んだあなたは、もう「マクロの記録」ボタンをクリックするだけのユーザーではありません。Wordの心臓部に直接命令を下せる「アーキテクト」の入り口に立っています。
検索ができるということは、「文書の状態を監視できる」ということです。
次は、見つけた箇所に対して「自動でフォントを変える」「表の中に書き出す」といった応用が待っています。
まずはこのコードをコピペして、あなたの手元の文書で動かしてみてください。何か疑問があれば、いつでも聞いてくださいね。ここをクリアすれば、Word VBAはあなたの最強の武器になります。
応援していますよ!
