みなさん、こんにちは!
タカハシ(@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 キーで検索をかけると、左側に「ナビゲーションウィンドウ」が登場しますね。入力欄にキーワードを入力すると、あっという間に検索をかけてくれて、マッチするワードは黄色くハイライトされます。
さらに高度な検索をかけたいときには、入力欄の右端にある「▼」ボタンから検索メニューを開き、「高度な検索」を選択します。
すると、「検索と置換」ウィンドウが開きますよね。さらに「検索と置換」ウィンドウの「オプション」ボタンをクリックすると、設定項目が山ほど出現します。
はい、この画面。
この検索と置換の設定がFindオブジェクトです。
Findオブジェクトは以下のプロパティを持っていまして、それは続いて説明する検索と置換の設定と対応をしています。
- Textプロパティ:検索する文字列
- MatchByteプロパティ:半角と全角を区別する
- MatchCaseプロパティ:大文字と小文字を区別する
- MatchFuzzyプロパティ:あいまい検索(日)
- MatchPhraseプロパティ:空白文字を無視する
- MatchWholeWordプロパティ:完全に一致する単語だけを検索する
- MatchWildcardsプロパティ:ワイルドカードを使用する
Findオブジェクトというと、検索すること自体や、その結果のことを表しているように思ってしまいますが、Word VBAにおけるFindオブジェクトは検索条件のことを指します。
カーソル位置以降の検索を実行する
まず参考として、実際にWordで検索をする操作をしてみましょう。
以下のように
- カーソル位置:文書の冒頭
- 検索文字列:「Word」
という検索設定で「次を検索」をしてみます。
すると、以下のようにカーソル位置の直後のマッチしたワードが選択状態になりますよね。
続けて「次を検索」をもう一度クリックしてみると
最初の検索結果の直後の「Word」が選択範囲になりました。
この条件と動作をよく覚えておいてくださいね。
Word VBAでカーソル位置以降の検索を実行する
Word VBAで同じことを実行してみようと思います。
以下プロシージャを作成してみましょう。
Sub findText()
With Selection.Find
.Text = "Word"
.Execute
End With
End Sub
以下でこのプロシージャの解説をしていきますね。
カーソル位置以降の検索を設定する
まずカーソル位置以降の検索条件を設定する場合は、Selectionオブジェクト配下のFindオブジェクトを使います。
このFindオブジェクトに対して、いろいろな条件を設定していきます。
Textプロパティで検索文字列を設定する
Findオブジェクトに対して本当にいろいろな検索条件を設定するプロパティが存在するのですが、今回はシンプルに検索文字列だけ設定をしましょう。
検索文字列を設定するにはTextプロパティを使います。
今回のプロシージャでは「Word」という文字列を検索文字列として指定しています。
Executeメソッドで検索を実行する
検索の条件設定が完了した暁には、検索を実行するのですが、その際にはFindオブジェクトに対してExecuteメソッドを使います。
これで検索が実行されます。
では、カーソル位置を文書の冒頭に戻して、上記プロシージャを実行してみましょう。
文書の最初に登場する「Word」が選択状態になりましたね。続いて、この選択状態のまま、もう一度プロシージャfindTextを実行してみましょう。
次に登場する「Word」が選択状態になりましたね。
つまり、Executeメソッドは「検索と置換」ウィンドウにおける「次を検索」ボタンの押下1回と同じ役割を果たしていることがわかりますね。
そして、選択範囲つまりSelectionオブジェクトの指し示す範囲は直後の検索結果に移ります。
この二つの事実はわりと重要だと思うので、よくつかんでおいて頂ければと思います。
まとめ
Word VBAで検索をするためのFindオブジェクトとその実行の基本中の基本についてお伝えしました。
まず、Findオブジェクトが「検索設定」をつかさどるオブジェクトであるということは重要なポイントです。様々なプロパティを持ちますが、検索文字列を設定するのはTextプロパティになります。
実際に、検索を実行する際にはFindオブジェクトに対して、Executeメソッドを使いますが、これは「次を検索」ボタンの押下と同様の動作となります。
Selectionオブジェクトに対するFindオブジェクトを実行すると、現在のカーソル位置または選択範囲の直後の検索結果に選択範囲が移ります。
Findオブジェクト、深いですね。
では、次回はExecuteメソッドを1回こっきりではなく、最後まで繰り返し実行する方法をお伝えします。
どうぞお楽しみに!