見出し画像

パソコン悪戦苦闘記録

Wordマクロ検索置換実行時の注意点

 ワープロソフト Word での検索や置換の機能は、なかなか便利です。そして、文書処理をするのに、Wordマクロを使って、検索置換を実行することも、よく行われています。
 
 先日は、文書中の金額表示(半角数字+円)を赤色文字に変換させる処理を例にして、
そのWordマクロのVBAコードを紹介する記事を書きました。
 
 半角数字を赤色に変換するマクロの記事は、
   こちらをご覧ください。






 マクロで検索を実行するには、Find を使います。
 このFind の使い方は、
【1】Rnageオブジェクトの Find プロパティ を利用する
【2】Selectionオブジェクトの Find プロパティ を利用する
と、2つの方法があります。

 この2つの方法においては、何が違うかというと、
検索箇所がその都度、選択状態になるかどうか、ということです。
 【1】方式では、検索箇所は選択状態にならないのに対し、
 【2】方式では、検索された箇所は、その都度選択状態になります。
 ですが、どちらの方式においても、処理が行われた後の、最後の結果自体に違いは出てきません。ですから、この違いを意識する必要はないと思います。
 
 ですが、こと、両者の振る舞いに関しては、決定的な違いがあります。ですから、この振る舞いの違いは知っておく必要があります。
 
 その決定的な違いというのは、
 Wordアプリの「検索と置換」ダイアログボックス連動しているかどうか、
ということです。
 つまり、
 【1】のRange方式では、連動しない
 【2】のSelection方式では、連動する
この違いがあるのです。

 Selection方式では、「検索と置換」ダイアログボックスと連動するので、VBAコードを書くときに、一つ、重要な注意点が出てきます。
 それは、ワイルドカード(「?」や「*」、「[]」など)を使うときです。
.MatchWildcards = True の1行を書く前に、
必ず、.MatchFuzzy = False の1行が必要になる、
ということです。
 
 「検索と置換」ダイアログボックスにおいては、.MatchFuzzy = True が既定値となっているため、
 .MatchFuzzy = False を書かないことには、ワイルドカードを使えないのです。

 「検索と置換」ダイアログボックス中の、
  「ワイルドカード検索」と
  「あいまい検索」の
2つのチェックボックスの、2つとも同時にチェックを付ける(Trueにする)ことはできません。
 ですから、
 .MatchFuzzy = False としないままに、ワイルドカードを使うと、エラーが出るのです。
  
 これに対し、Range方式では、単に
 .MatchWildcards = True の1行だけで済み、
 .MatchFuzzy = False の記述は不要です。
 「検索と置換」ダイアログボックスとの連動がなくて、VBAで独立しているからです。
 
  この解説、仕組みを理解できない方は、
いったん、「いつも隣にITのお仕事」というWebサイト中の
「Word VBAでワイルドカードを使ったパターン検索をする方法」のページを読んでください。
 
 そのページは、こちらです。

 以上の理由により、私がWordマクロでFindを使うときは、いつもRangeオブジェクトのFindプロパティを使っています。
 Selectionオブジェクトの Find プロパティを使うことは、まずありません。
 


 
それでは、また次の記事で
goosyun
名前:
コメント:

※文字化け等の原因になりますので顔文字の投稿はお控えください。

コメント利用規約に同意の上コメント投稿を行ってください。

 

  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「VBAプログラミング・マクロ」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事