みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
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にはできないので、こちらはオフにしましたね。
そして、「第〇位」というワードを検索するという処理になりますね。
パターンで検索した文字列を置換する
このプロシージャを置換するように変更していけばよいわけですね。
こちらの記事が参考になります。
記事にある通り、置換をするためには以下二点を変更すれば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文書がこちら。
この文書に対して先ほどのプロシージャを実行してみると…
全部「ランク1」になってしまいました。
検索する文字列が「パターン」なわけですから、置換する文字列も「パターン」つまりランク1,ランク2、ランク3としたいのです。
そんなことできるんでしょうか…?
Wordの置換機能にワイルドカードを使う
それができるんですね。
しかも、Wordのデフォルトの検索機能で実現できるのを知っていましたか?
まず、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.〇」というパターンに置換する場合、検索文字列は
置換後の文字列は
と設定します。実行をすると以下のようになります。
カンマ入りの金額を表すパターン
次にカンマ区切りの金額をパターンで検索し、置換する方法を見てみましょう。
検索文字列は
置換文字列は
とします。実行をすると…
このように置換されます。
置換後の文字列について補足ですが、「\」はそのまま記述するとワイルドカードと判別されてしまいます。ですから、特殊記号を表現する「^」(キャレット)を使い、「\」記号を表す「^92」を使用しているのです。
まとめ
Word VBAでワイルドカードを使ってパターンで置換する方法をお伝えしました。
Wordの基本機能でもワイルドカードを使ってパターン検索&置換ができますので、VBAとともにぜひご活用くださいね。
VBAを学んでいくと、おのずとWordの構造がわかってきて、一石二鳥な感じがしますよね。
さて、本シリーズはこれにて終了ですが、また便利なWord VBAのテクニックをお伝えしていきます。
次はカーソル移動のショートカットキーを作るシリーズがおすすめです。
どうぞお楽しみに!