【入門編】【初心者向け】「検索して見つかったらメッセージボックスで通知」するステップアップ検索 – Word VBA解析バイブル

スポンサーリンク

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はあなたの最強の武器になります。

応援していますよ!

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