【入門編】【初心者向け】「検索して見つかった回数」をカウントし、ステータスバーに表示する – Word VBA解析バイブル

スポンサーリンク

Word VBAをマスターせよ:検索ヒット数をカウントし、ユーザーを導く「プロの進捗表示」術

こんにちは。Word VBAの世界へようこそ。

「マクロの記録」ボタンを押して、生成されたコードを眺めて「なんとなく動くけれど、これでいいのかな?」と不安を感じたことはありませんか?その感覚、とても大切です。

今日は、Word VBAにおける「検索(Find)」と「置換(Replacement)」を操り、さらには処理の進捗をステータスバーに表示するという、一歩先行くテクニックを伝授します。これさえ理解すれば、あなたのマクロはただ動くだけのスクリプトから、現場で信頼されるツールへと進化します。

—

1. なぜ「検索」を極める必要があるのか

Wordの自動化において、最も頻繁に行う操作は「文字列の検索」です。
しかし、初心者が陥りがちなのが「どこまで処理したか分からない」という状態。数千ページの文書を処理している最中、Wordがフリーズしたように見えたら、ユーザーは不安で「強制終了」してしまいますよね。

だからこそ、「今、何個見つけて、どこまで処理したか」をステータスバーに表示する。この一手間が、あなたのマクロを「プロの道具」に変えます。

—

2. 実装コード:確実な検索とカウントの作法

まずは、実際に動くコードを見てみましょう。このコードは、指定した単語を文書全体から探し出し、見つかるたびにステータスバーへ状況を報告します。

Sub CountAndFeedbackSearch()
Dim rng As Range
Dim searchWord As String
Dim count As Long

‘ 検索したい言葉を設定
searchWord = “自動化”
count = 0

‘ 文書の先頭から検索を開始するための準備
Set rng = ActiveDocument.Content

‘ 画面の更新を止める(処理速度を劇的に向上させる魔法です)
Application.ScreenUpdating = False

With rng.Find
.ClearFormatting
.Text = searchWord
.Forward = True
.Wrap = wdFindStop ‘ 文末で止める
.Format = False

‘ ループ処理:見つからなくなるまで繰り返す
Do While .Execute
count = count + 1

‘ ステータスバーに現在のカウントを表示
Application.StatusBar = “検索中… 現在 ” & count & ” 件見つかりました。”

‘ 必要であればここで処理(色を変える等)を追加可能
‘ rng.Font.Color = wdColorRed
Loop
End With

‘ 後処理:ステータスバーを元に戻す
Application.StatusBar = False
Application.ScreenUpdating = True

MsgBox “検索完了!合計 ” & count & ” 件見つかりました。”, vbInformation
End Sub

—

3. コードの「魂」を解説する

① `Application.ScreenUpdating = False` の重要性

初心者が忘れがちですが、これは必須です。これを設定しないと、Wordは検索するたびに画面を再描画しようとします。数千件の検索を行えば、その分だけ画面がチラつき、処理速度が極端に落ちます。「処理中は画面を更新しない」。これがプロの鉄則です。

② `Range` オブジェクトの活用

「マクロの記録」では `Selection`(現在のカーソル位置)が使われますが、実務では `Range` を使いましょう。`Selection` は画面のカーソルを動かすため、非常に低速で不安定です。`Range` はメモリ上で処理を行うため、驚くほど高速です。

③ `Application.StatusBar` はエンジニアの誠実さ

ステータスバーは、ユーザーとの対話窓口です。巨大な文書を扱う際、何も表示されないのと「〇件目を見つけています」と出るのとでは、安心感が全く違います。これは、使う人への「思いやり」をコードで表現するということです。

—

4. 陥りやすいエラーと対処法

「終わらない無限ループ」に注意

`Do While .Execute` を使うとき、検索設定(`.Wrap`)を間違えると、文書の最後まで行ってもまた先頭に戻り、永久にループし続けることがあります。

  • 解決策: `.Wrap = wdFindStop` を必ず指定しましょう。これにより、文書の末尾に到達した時点でループが正常に終了します。

「検索対象がフォーマットを含んでいる」場合

もし、過去に検索した際の設定が残っていると、意図しない検索結果になることがあります。

  • 解決策: `.ClearFormatting` を必ず呼び出し、検索条件を一度クリーンな状態にリセットしてください。

—

最後に:ここをクリアすれば「脱・初心者」

今回学んだ「Rangeオブジェクトの活用」「ScreenUpdatingによる高速化」「ステータスバーでの進捗表示」。これらは、Word VBAにおいて最も基本的でありながら、最も重要な基盤技術です。

まずはこのコードをコピーして、手元の文書で動かしてみてください。そして、`count` の値を別の変数に変えたり、見つけた単語を赤字にしてみたりと、少しずつ改造してみましょう。

プログラミングは「書く」ことよりも「動かして、観察する」ことで上達します。何か分からないことがあれば、いつでもまた聞きに来てくださいね。あなたの自動化ライフが、より快適なものになることを応援しています!

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