【入門編】【初心者向け】検索対象の文字列を「入力ボックス」から動的に指定する汎用ツール作成 – Word VBA解析バイブル

スポンサーリンク

Word VBAの真髄:ハードコーディングを卒業し、「動的検索・置換ツール」を構築する

こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押して生成される、あの長くて冗長なコードに辟易していませんか?

Word VBAをマスターする第一歩は、「固定値(ハードコーディング)」からの脱却です。今日は、あなたが実行時に検索したい文字を自由に入れられる、プロ仕様の「動的検索・置換ツール」を一緒に作っていきましょう。ここをクリアすれば、あなたのWord自動化スキルは格段にレベルアップします。

—

1. なぜ「ハードコーディング」を避けるべきなのか?

VBAを始めたばかりの人が書きがちなのが、これです。

‘ 悪い例:これだと「旧製品名」を「新製品名」に変えるしかできない
Selection.Find.Text = “旧製品名”
Selection.Find.Replacement.Text = “新製品名”

これでは、新しい案件が来るたびにコードを書き換える必要があります。エンジニアの仕事は「仕組みを作ること」であって、「使い捨てのコードを量産すること」ではありません。「何を探し、何に変えるか」を、実行する瞬間にユーザーから受け取る。 これが自動化の鉄則です。

—

2. 汎用ツール構築の設計図

今回は「InputBox(入力ボックス)」という機能を使います。これは、プログラムの実行中に小さなウィンドウを表示して、ユーザーから直接値を受け取るための窓口です。

構築の手順

1. InputBoxで値を拾う:検索する文字と、置換後の文字を聞く。
2. Findオブジェクトを初期化する:余計な設定が残っていると誤作動するため、まずはクリアする。
3. 検索・置換を実行する:Wordの強力な `Find` 機能に指示を出す。

—

3. 実装コード:魂を込めた汎用置換ツール

以下のコードをVBAエディタ(Alt + F11)の標準モジュールに貼り付けてください。

Sub DynamicSearchAndReplace()
Dim findText As String
Dim replaceText As String

‘ 1. ユーザーから値を取得(キャンセルされたら終了)
findText = InputBox(“検索する文字列を入力してください:”, “検索の指定”)
If findText = “” Then Exit Sub

replaceText = InputBox(“置換後の文字列を入力してください:”, “置換の指定”)

‘ 2. Wordの検索機能を初期化(ここがプロのこだわりです)
‘ 前回の検索設定が残っているとバグの元になるため、一旦クリアします
With Selection.Find
.ClearFormatting
.Replacement.ClearFormatting

‘ 3. 検索設定の定義
.Text = findText
.Replacement.Text = replaceText
.Forward = True ‘ 文書の後方に向かって検索
.Wrap = wdFindContinue ‘ 文末まで行ったら先頭に戻る
.Format = False ‘ 書式は無視(文字のみ置換)
.MatchCase = False ‘ 大文字小文字を区別しない
.MatchWholeWord = False ‘ 単語の一部でもヒットさせる

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

MsgBox “置換が完了しました。”, vbInformation
End Sub

—

4. コードの深掘り解説:ここが「プロの勘所」

初心者がよくハマるポイントを、私の経験から解説します。

  • `.ClearFormatting` の重要性:

以前の検索で「太字の文字だけ検索」といった設定をしたままだと、後で別の検索をする時に「なぜかヒットしない!」という事態になります。検索を開始する前に、「設定を真っ白にする」のが鉄則です。

  • `.Wrap = wdFindContinue`:

これがないと、カーソル位置より後ろしか検索してくれません。`wdFindContinue` を指定することで、文書全体を漏れなくスキャンできます。

  • エラーハンドリング:

`If findText = “” Then Exit Sub` の部分です。入力ボックスで「キャンセル」を押された場合、空文字が返ってきます。そのまま進むと空文字を置換しようとして無駄な処理が走るため、ここで安全に終了させるのが大人の流儀です。

—

5. 次のステップへ:正規表現への挑戦

このツールが動くようになったら、あなたはもう「マクロの記録」卒業生です。
次は、さらに高度な「正規表現(Regular Expressions)」を学びましょう。

「特定の数字の羅列を探したい」「メールアドレスの形式だけ抜き出したい」といった複雑な検索は、通常の `Find` では限界があります。VBAで `VBScript.RegExp` オブジェクトを呼び出せば、検索の自由度は無限大に広がります。

まずは今回作成したコードを動かし、自分の手で「自動化の魔法」を体感してください。コードは裏切りません。正しく設計すれば、あなたの代わりに何度でも、正確に働いてくれます。

もし詰まったら、いつでも戻ってきてください。私たちは常に、より賢い自動化を目指しています。頑張ってくださいね!

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