Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法

pattern

photo credit: Nicholas Erwin America’s Grandstand via photopin (license)

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

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

前回記事はコチラ。

Word VBAでワイルドカードを使ったパターン検索をする方法
Word VBAでいろいろな検索と置換をする方法についてお伝えしています。今回はWord VBAでワイルドカードを使ってパターン検索をする方法についてです。ワイルドカード一覧もありますのでご活用ください。

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

ん?検索がもうできているんだから、置換なんてすぐできるでしょ。

…とお思いかも知れませんが、Wordの検索&置換機能を侮ることなかれ。

ワイルドカードを使ったパターンでの置換の場合は、さらに便利な能力を発揮できるのであります。

ということで、Word VBAでワイルドカードを使ってパターンで超便利な置換をする方法、行ってみましょう!

スポンサーリンク

前回のおさらい

では、まずワイルドカードを使ったパターン検索を復習していきましょう。

前回の記事で作成したプロシージャはこちらです。

Sub findPattern()

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

End Sub

MatchWildcardsプロパティでTrueにすればワイルドカードを使った検索ができるようになります。ただし、MatchFuzzyプロパティと同時にTrueにはできないので、こちらはオフにしましたね。

そして、「第〇位」というワードを検索するという処理になりますね。

パターンで検索した文字列を置換する

このプロシージャを置換するように変更していけばよいわけですね。

こちらの記事が参考になります。

Word VBAで文字列を置換する方法!いくつかの基本パターンを徹底解説
Word VBAでいろいろな検索や置換をする方法についてお伝えしています。Word VBAで置換をする方法は、いくつかのパターンがありますので、それぞれの組み方と特徴を徹底解説をしていきます。

記事にある通り、置換をするためには以下二点を変更すればOK。

  • FindオブジェクトのReplacement.Textに置換後の文字列を設定する
  • Executeメソッドの際に、名前付き引数ReplaceにwdReplaceAllを設定する

ということで、プロシージャとしてはこのようになりました。

Sub replaceText()

With Selection.Find
    .Text = "第?位"
    .MatchFuzzy = False
    .MatchWildcards = True
    .Replacement.Text = "ランク1"
    .Execute Replace:=wdReplaceAll
End With

End Sub

元のWord文書がこちら。

置換対象のWord文書

この文書に対して先ほどのプロシージャを実行してみると…

Word VBAでパターン検索して置換

全部「ランク1」になってしまいました。

検索する文字列が「パターン」なわけですから、置換する文字列も「パターン」つまりランク1,ランク2、ランク3としたいのです。

そんなことできるんでしょうか…?

Wordの置換機能にワイルドカードを使う

それができるんですね。

しかも、Wordのデフォルトの検索機能で実現できるのを知っていましたか?

まず、Wordの検索オプションで「ワイルドカードを使用する」にチェックを入れたうえで、検索する文字列に

第(?)位

置換後の文字列に

ランク\1

として、「すべて置換」をします。すると

Wordでパターンで置換する

このようにパターンで検索されました。

VBA使わずとも、Wordの基本機能でできるんですよ。

置換後のパターンを作る方法

ポイントは検索文字列と置換後の文字列に設定したワイルドカードです。

まず、検索文字列ではワイルドカード「( )」が使われていますね。この括弧で囲った部分はグループ化され式が生成されます。

(式)

そして、式はその登場順に、1から番号が付与されます。

つまり今回の例では「?」が式として生成され、番号1が付与されます。

そして、ワイルドカード「\」と番号の組み合わせで、式を呼び出すことができます。

\式番号

今回の例では、「ランク」という文字列に続けて、番号1の式を連結したものを、置換後の文字列としなさいという意味なわけです。

グループ化で式を生成し、それを「\」+番号で呼び出すことで、置換後の文字列もパターンで設定することができるというわけですね。

Word VBAでパターンによる置換を実現する

この置換の方法は、そのままWord VBAでも実現することができます。

プロシージャとしてはこのようになります。

Sub replaceText()

With Selection.Find
    .Text = "第(?)位"
    .MatchFuzzy = False
    .MatchWildcards = True
    .Replacement.Text = "ランク\1"
    .Execute Replace:=wdReplaceAll
End With

End Sub

このプロシージャを実行すると、「第〇位」という文字列が「ランク〇」という形に、パターンで置換されます。

ページ数を表すパターン

では、ほかの例も見てみましょう。

任意の1から3桁までの数字による「〇ページ」という文字列を組み合わせたパターンで検索し、「P.〇」というパターンに置換する場合、検索文字列は

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

置換後の文字列は

P.\1

と設定します。実行をすると以下のようになります。

Word VBAでページ数をパターンで置換

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

次にカンマ区切りの金額をパターンで検索し、置換する方法を見てみましょう。

検索文字列は

([0-9,]{1,})円

置換文字列は

^92\1

とします。実行をすると…

Word VBAでカンマ区切り金額をパターンで置換

このように置換されます。

置換後の文字列について補足ですが、「\」はそのまま記述するとワイルドカードと判別されてしまいます。ですから、特殊記号を表現する「^」(キャレット)を使い、「\」記号を表す「^92」を使用しているのです。

まとめ

Word VBAでワイルドカードを使ってパターンで置換する方法をお伝えしました。

Wordの基本機能でもワイルドカードを使ってパターン検索&置換ができますので、VBAとともにぜひご活用くださいね。

VBAを学んでいくと、おのずとWordの構造がわかってきて、一石二鳥な感じがしますよね。

さて、本シリーズはこれにて終了ですが、また便利なWord VBAのテクニックをお伝えしていきます。

次はカーソル移動のショートカットキーを作るシリーズがおすすめです。

Word VBAでカーソル移動をする基本中の基本!Moveメソッドの使い方
カーソル移動は全く生産性がないくせに、うっかりしていると何気に手間がかかってしまいます。まず今回は、Word VBAのカーソル移動の基本中の基本、Moveメソッドの使い方についてお伝えします。

どうぞお楽しみに!

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