【Word】ワイルドカードを使うときのよくあるエラー

2016年5月12日

こんなことありませんか?

[置換後の文字列]に、指定できない範囲の番号が含まれています。

ワイルドカード(Wordの正規表現)を使って検索してみます。たとえば、以下のような検索です。

16-05-123

このような時に時々表示されるエラーメッセージに以下のものがあります。これ何が原因か分かりますか?このようなときには、エラーメッセージを無視せずに読んでみます。ここに解決の糸口があるからです。

16-05-121
[置換後の文字列]に、指定できない範囲の番号が含まれています。

対処方法

[置換後の文字列]と書れているので、[置換]タブをクリックして[置換後の文字列]欄に何が書かれているのか確認します。ワイルドカードで置換を使っている方なら分かるかも知れません。そうです。[置換後の文字列]欄に\2という文字があるからです。

16-05-120

\1\2というのは、[検索する文字列]欄の半角括弧で囲まれた部分と連動しています。[検索する文字列]欄には半角括弧で囲まれた部分が1箇所しかありません。よって、\2に対応する箇所がないためにエラーメッセージが表示されました。

実はこのエラーはマクロを実行しても表示されます。マクロで同じように[検索と置換]ダイアログボックスを用いた処理を行った場合(Selection.Findプロパティを用いた場合)、[検索と置換]ダイアログボックスの[検索する文字列]欄の文字列がマクロの実行に影響します。

16-05-122

あ、このエラーは、先日の記事「【Word VBA】不要な改行記号を探して削除する 」で出ることがあるんですよね(笑)。なのでマクロ修正しておきましたから。今日の記事は、その修正の理由説明でした。

マクロ解説

5行目を追加しました。

このようにして[検索と置換]ダイアログボックスに残っていた[置換後の文字列]欄の文字列を削除します。

めでたしめでたし。

・・・・・途中から・・・・


 '検索実行
 Selection.Find.ClearFormatting
 With Selection.Find
  .Text = "^13"        '検索する文字列
  .Replacement.Text = ""   '置換後の文字列(16-05-12追加)
  .Forward = True       '検索方向
  .Wrap = wdFindContinue   '検索対象のオブジェクトの末尾での操作
  .Format = False       '書式
  .MatchCase = False     '大文字と小文字の区別する
  .MatchWholeWord = False   '完全に一致する単語だけを検索する
  .MatchByte = False     '半角と全角を区別する
  .MatchAllWordForms = False '英単語の異なる活用形を検索する
  .MatchSoundsLike = False  'あいまい検索(英)
  .MatchFuzzy = False     'あいまい検索(日)
  .MatchWildcards = True   'ワイルドカードを使用する
 End With
 Selection.Find.Execute

・・・・・途中まで・・・・

関連記事

【Word VBA】不要な改行記号を探して削除する

-Word
-,