Word VBAでワイルドカードを使ったパターン検索をする方法


joker

photo credit: Leo Reynolds VIP [detail] via photopin (license)

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

Word VBAでいろいろな検索と置換をする方法についてシリーズでお伝えしています。

前回の記事はコチラ。

Word VBAで検索の方向を変更する方法と文書全体を検索する方法
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。今回はForwardプロパティで検索方向を変える方法、Wrapプロパティで文書全体を検索する方法についてお伝えします。

検索の方向や文書の最後まで検索したときの挙動をコントロールする方法をお伝えしました。

さて、Wordではワイルドカードを使った多種多様な検索をかけることができますが、VBAでももちろん実現をすることができます。

今回はWord VBAでワイルドカードを使った検索をする方法についてお伝えします。

スポンサーリンク

Wordでワイルドカードを使った検索をする

WordではExcelよりもはるかに高度なワイルドカードを使えるの、ご存知でした?

定番は任意の1文字を表す「?」や、任意の文字列を表す「*」なのですが、Wordではほかにも多数のワイルドカードが用意されています。

それぞれの組み合わせで、様々な文字列のパターンで検索をすることができます。

記号 意味 使用例
? 任意の1文字 第?回 s?t
* 任意の文字列 第*回 s*t
< 単語の先頭 <第 <pre
> 単語の末尾 回> fix>
[ ] 候補中のいずれか1文字 [abcde] [東西南北]
[-] 範囲内のいずれか1文字 [0-9] [a-zA-Z] [ぁ-ん]
[! ] 候補以外のいずれか1文字 [!abcde] [!東西南北]
( ) グループ化して式を生成 (ピヨ) ([0-9]{1,3})
{n} 直前の文字または式をn回繰り返し go{2}gle
{n,} 直前の文字または式をn回以上繰り返し [0-9]{1,}円
{n,m} 直前の文字または式をn~m回の間で繰り返し [0-9]{1,3}ページ
@ 直前の文字または式を1回以上繰り返し lo@p

たくさんありますね~。

Wordの検索オプションで「ワイルドカードを使用する」をオンにすれば、これらのワイルドカードを使用することができるようになります。

Wordの検索でワイルドカードを使用する

MatchWildcardsプロパティでワイルドカードを使用する

Word VBAでの検索時にワイルドカードを使用する設定をする場合は、FindオブジェクトのMatchWildcardsプロパティをTrueにする必要があります。

Findオブジェクト.MatchWildcards = True

その上で、FindオブジェクトのTextプロパティに検索パターンを設定して検索を実行すればよいのですが…

MatchWildcardsプロパティ設定時に実行時エラーが発生する理由

しかし、例えば以下のようなプロシージャを実行しても

Sub findPattern()

With Selection.Find
    .Text = "第?位"
    .MatchWildcards = True
    Do While .Execute
        Stop
    Loop
End With

End Sub

「MatchPhrase、MatchWildcards、MatchSoundsLike、MatchAllWordForms、MatchFuzzyパラメーターは、同時にTureに設定することはできません。」という実行時エラーが発生します。

Word VBAでMatchWildcardsを使用したときの実行時エラー

…なんという複雑な条件なんでしょう。

Wordの検索オプションはデフォルト時には以下のような設定になっています。

プロパティ 既定値 検索オプションの設定
MatchWildcards False ワイルドカードを使用する
MatchSoundsLike False あいまい検索(英)
MatchAllWordForms False 英単語の異なる活用形も検索する
IgnoreSpace False 空白文字を無視する
IgnorePunct False 句読点を無視する
MatchFuzzy True あいまい検索(日)

※MatchPhraseは空白文字を無視する、句読点を無視する、両方の設定を同時に対応したプロパティです。

以下の記事で詳細をお伝えしています。

Word VBAで検索オプションを設定して検索をする方法とそのプロパティ一覧
Word VBAで色々な検索や置換をする方法についてお伝えしています。今回はWord VBAで検索オプションを設定して検索をする方法をお伝えしつつ、その設定をするプロパティ一覧ををまとめています。

つまり、MatchFuzzyがTrueになっているので、ダメだよと怒られちゃっているわけですね。

MatchFuzzyプロパティをFalseに設定する

ですから、以下のようにMatchWildcardsプロパティをTrueにする前に、MatchFuzzyプロパティをFalseにしてあげます。

Sub findPattern()

With Selection.Find
    .Text = "第?位"
    .MatchFuzzy = False
    .MatchWildcards = True
    Do While .Execute
        Stop
    Loop
End With

End Sub

これを実行すると、無事に以下のように「第~位」というワードを検索できるようになるわけです。

Word VBAでワイルドカードを使った検索をする

ワイルドカードを使ってパターンで検索をする例

他の検索パターンも見てみましょう。

ページ数を表すパターン

例えば、任意の1桁から3桁までの半角数字に「ページ」という文字列を組み合わせたパターンは

[0-9]{1,3}ページ

とすればよいですね。

Word VBAでワイルドカードを使ってページ数を検索する

カンマ入りの金額を表すパターン

また、カンマ区切りが入っている任意の半角数字の数値にプラスして「円」の文字列をマッチさせたいときは

[0-9,]{1,}円

とします。

Word VBAでワイルドカードを使って金額の検索をする

まとめ

Word VBAでワイルドカードを使った検索をする方法についてお伝えしました。

パターンの作り方は少しややこしいですが、他にも郵便番号や電話番号など様々なパターンを生成できますので、頑張ってトライしてみてください。

また、MatchFuzzyプロパティのオフについては忘れずに!

次回はワイルドカードを使った置換の方法についてお伝えしていきます。

Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。今回は、Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法をお伝えします。Wordの基本機能でも使えますよ。

どうぞお楽しみに!

連載目次: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をコピーしました