Wordで文書を作成していると、特定のパターンに一致する文字列を一括で検索・置換したい場面が出てきます。そんなときに便利なのが、VBA(Visual Basic for Applications)を使ったワイルドカード検索です。今回は、初心者の方でもわかりやすいように、ワイルドカードを使った検索・置換の基本から実践までを解説します。
ワイルドカードとは?
ワイルドカードとは、文字列の一部を「?」や「*」などの記号で表現し、パターンに一致する文字列を検索するための仕組みです。例えば、「s?t」と指定すると、「sat」や「set」など、sで始まりtで終わる3文字の単語を検索できます。
ワイルドカードの基本記号
- ?任意の1文字
- *任意の0文字以上
- 指定した文字のいずれか1文字
- {n,m}直前の文字がn回以上m回以下繰り返される
- < > 単語の始まりと終わりを示す
これらの記号を組み合わせることで、複雑なパターンにも対応できます。
VBAでワイルドカードを使った検索・置換の基本
VBAを使ってワイルドカード検索を行うには、まず「Find」オブジェクトを設定し、検索条件を指定します。以下は、3文字のsで始まりtで終わる単語を検索する例です。
With Selection.Find .ClearFormatting .Text = "s?t" .MatchWildcards = True .Execute End With
このコードでは、MatchWildcardsプロパティをTrueに設定することで、ワイルドカード検索を有効にしています。
置換の例
検索した文字列を置換する場合は、以下のようにReplacementプロパティを使用します。
With Selection.Find .ClearFormatting .Text = "s?t" .Replacement.Text = "new" .MatchWildcards = True .Execute Replace:=wdReplaceAll End With
このコードでは、「s?t」に一致するすべての文字列を「new」に置換します。
実践!よく使うパターン検索の例
任意の1桁から3桁までの半角数字に「ページ」を組み合わせたパターン
With Selection.Find
.ClearFormatting
.Text = "{1,3}ページ"
.MatchWildcards = True
.Execute
End With
このコードでは、1桁から3桁の数字と「ページ」が続く文字列を検索します。
カンマ区切りの金額に「円」を組み合わせたパターン
With Selection.Find
.ClearFormatting
.Text = "{1,}円"
.MatchWildcards = True
.Execute
End With
このコードでは、カンマ区切りの数字と「円」が続く文字列を検索します。
特定のメールアドレスのドメインを置換する例
With Selection.Find .ClearFormatting .Text = "<+@yahoo.co.jp>" .MatchWildcards = True .Replacement.Text = "<1@gmail.com>" .Execute Replace:=wdReplaceAll End With
このコードでは、yahoo.co.jpドメインのメールアドレスをgmail.comに置換します。
よくあるエラーとその対処法
ワイルドカード検索を行う際に、以下のようなエラーが発生することがあります。
「置換後の文字列に、指定できない範囲の番号が含まれています」
このエラーは、置換後の文字列に2などの参照番号が含まれているが、検索パターンに対応するグループが不足している場合に発生します。例えば、検索パターンに2つのグループが必要なのに、1つしか指定していない場合です。
対処法としては、検索パターンに必要なグループを追加するか、置換後の文字列から不要な参照番号を削除します。
ワイルドカードのオプションが正しく設定されていない
ワイルドカード検索を行うには、検索オプションで「ワイルドカードを使用する」をオンにする必要があります。VBAでは、MatchWildcardsプロパティをTrueに設定します。
まとめ
Word VBAでワイルドカードを使った検索・置換は、文書内の特定のパターンを効率的に処理する強力なツールです。初心者の方でも、基本的な記号と構文を覚えることで、さまざまなパターンに対応できます。ぜひ、実際の文書で試してみてください。
他にも疑問やお悩み事があればお気軽にLINEからお声掛けください。



コメント