Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム


loupe

photo credit: VeRoNiK@ GR One day at a time via photopin (license)

みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Wordの検索、置換機能は優秀ですよね。

文書全体に対して特定の文字列を探し当てて、別のワードに一気に置換…そんなものはお手の物です。

ただ、例えばこんな場合はどうでしょうか?

  • 特定の文字列だけに書式を設定したい
  • 複数の文字列をそれぞれ別のワードに置換したい
  • 複数の文書に対して置換を行いたい

手作業でできないことはないですが、まあ面倒ですし、生産的な作業にはならなそうですよね。

そんなときに、Word VBAが活躍します。検索・置換による一括処理は大得意です。

ということで、今回からシリーズで、Word VBA初心者向けに検索&置換を活用する方法についてお伝えします。

初回の今回は、Word VBAで検索をつかさどるFindオブジェクトの基本中の基本の最初の一歩について、たぶんどこよりも丁寧に解説します。

では、行ってみましょう!

スポンサーリンク

Word VBAのFindオブジェクトとは

Word VBAで検索・置換をする際には、絶対に避けて通れないのがFindオブジェクトの存在です。

こんなふうに使います…!

Sub findText()

With Selection.Find
    .Text = "Word"
    .Replacement.Font.Underline = True
    .Execute Replace:=wdReplaceAll
End With

End Sub

っつったって、わけがわからないでしょ?…そうなんです、Findオブジェクト、わかりづらいんです。

でも、大丈夫です。丁寧に説明しますので。

Wordの検索機能と比較してみる

Findオブジェクトを理解するには、Wordの検索機能と比較するのが一番わかりやすいです。

Word文書で Ctrl + F キーで検索をかけると、左側に「ナビゲーションウィンドウ」が登場しますね。入力欄にキーワードを入力すると、あっという間に検索をかけてくれて、マッチするワードは黄色くハイライトされます。

Wordの検索

さらに高度な検索をかけたいときには、入力欄の右端にある「▼」ボタンから検索メニューを開き、「高度な検索」を選択します。

Wordの検索メニューから高度な検索

すると、「検索と置換」ウィンドウが開きますよね。さらに「検索と置換」ウィンドウの「オプション」ボタンをクリックすると、設定項目が山ほど出現します。

Wordの検索と置換ウィンドウ

はい、この画面。

この検索と置換の設定がFindオブジェクトです。

Findオブジェクトは以下のプロパティを持っていまして、それは続いて説明する検索と置換の設定と対応をしています。

  • Textプロパティ:検索する文字列
  • MatchByteプロパティ:半角と全角を区別する
  • MatchCaseプロパティ:大文字と小文字を区別する
  • MatchFuzzyプロパティ:あいまい検索(日)
  • MatchPhraseプロパティ:空白文字を無視する
  • MatchWholeWordプロパティ:完全に一致する単語だけを検索する
  • MatchWildcardsプロパティ:ワイルドカードを使用する

Findオブジェクトというと、検索すること自体や、その結果のことを表しているように思ってしまいますが、Word VBAにおけるFindオブジェクトは検索条件のことを指します。

カーソル位置以降の検索を実行する

まず参考として、実際にWordで検索をする操作をしてみましょう。

以下のように

  • カーソル位置:文書の冒頭
  • 検索文字列:「Word」

という検索設定で「次を検索」をしてみます。

Wordで検索を実行する

すると、以下のようにカーソル位置の直後のマッチしたワードが選択状態になりますよね。

Wordで検索した最初の結果

続けて「次を検索」をもう一度クリックしてみると

Wordの次の検索結果

最初の検索結果の直後の「Word」が選択範囲になりました。

この条件と動作をよく覚えておいてくださいね。

Word VBAでカーソル位置以降の検索を実行する

Word VBAで同じことを実行してみようと思います。

以下プロシージャを作成してみましょう。

Sub findText()

With Selection.Find
    .Text = "Word"
    .Execute
End With

End Sub

以下でこのプロシージャの解説をしていきますね。

カーソル位置以降の検索を設定する

まずカーソル位置以降の検索条件を設定する場合は、Selectionオブジェクト配下のFindオブジェクトを使います。

Selection.Find

このFindオブジェクトに対して、いろいろな条件を設定していきます。

Textプロパティで検索文字列を設定する

Findオブジェクトに対して本当にいろいろな検索条件を設定するプロパティが存在するのですが、今回はシンプルに検索文字列だけ設定をしましょう。

検索文字列を設定するにはTextプロパティを使います。

Findオブジェクト.Text = 検索文字列

今回のプロシージャでは「Word」という文字列を検索文字列として指定しています。

Executeメソッドで検索を実行する

検索の条件設定が完了した暁には、検索を実行するのですが、その際にはFindオブジェクトに対してExecuteメソッドを使います。

Findオブジェクト.Execute

これで検索が実行されます。

では、カーソル位置を文書の冒頭に戻して、上記プロシージャを実行してみましょう。

Word VBAで検索した最初の結果

文書の最初に登場する「Word」が選択状態になりましたね。続いて、この選択状態のまま、もう一度プロシージャfindTextを実行してみましょう。

Word VBAで次の検索を実行した結果

次に登場する「Word」が選択状態になりましたね。

つまり、Executeメソッドは「検索と置換」ウィンドウにおける「次を検索」ボタンの押下1回と同じ役割を果たしていることがわかりますね。

そして、選択範囲つまりSelectionオブジェクトの指し示す範囲は直後の検索結果に移ります。

この二つの事実はわりと重要だと思うので、よくつかんでおいて頂ければと思います。

まとめ

Word VBAで検索をするためのFindオブジェクトとその実行の基本中の基本についてお伝えしました。

まず、Findオブジェクトが「検索設定」をつかさどるオブジェクトであるということは重要なポイントです。様々なプロパティを持ちますが、検索文字列を設定するのはTextプロパティになります。

実際に、検索を実行する際にはFindオブジェクトに対して、Executeメソッドを使いますが、これは「次を検索」ボタンの押下と同様の動作となります。

Selectionオブジェクトに対するFindオブジェクトを実行すると、現在のカーソル位置または選択範囲の直後の検索結果に選択範囲が移ります。

Findオブジェクト、深いですね。

では、次回はExecuteメソッドを1回こっきりではなく、最後まで繰り返し実行する方法をお伝えします。

Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
Word VBAで色々な検索&置換をする方法についてお伝えしています。Word VBAで連続して検索して蛍光ペンでハイライトをする方法についてお伝えします!Executeメソッドのイケてる機能がポイントです。

どうぞお楽しみに!

連載目次:Word VBAで色々な検索&置換をする方法

Word VBAのFindオブジェクトを使えば色々な条件で目的を探し当てて置換、書式設定、その他、いろいろな処理を施すことができます。Word VBAの検索の最初の一歩から順番にお伝えしていきます!
  1. Word VBAで文字列を検索するFindオブジェクトを使った最も基本のプログラム
  2. Word VBAでカーソル位置から連続で検索をして蛍光ペンでハイライトをする
  3. Word VBAで選択範囲のフォント設定を変更する方法とそのプロパティまとめ
  4. Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
  5. Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
  6. Word VBAで検索の方向を変更する方向と文書全体を検索する方法
  7. Word VBAでワイルドカードを使ったパターン検索をする方法
  8. Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法

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