【コード】Like演算子におけるワイルドカードの利用例

前回の記事 でも書きましたが、「検索と置換」のダイアログ(下記)で使えるワイルドカードと、Like演算子で使えるワイルドカードは異なりますので、注意が必要です。

[検索と置換]ダイアログボックス

(Word2003の「検索と置換」ダイアログ)

「検索と置換」ダイアログで使えるということは、マクロの一般的なFindオブジェクト(検索や置換に関係したもの)で利用できるというわけです。

実は、来週末の名古屋のワードマクロ勉強会 では、ワイルドカードについての勉強をするので、このタイミングでこの質問はあまりにもタイミングが良すぎます。

予習ついでに、Wordのワイルドカード検索と比較しながら、Like演算子で使えるワイルドカードについて簡単に書いておきます。

Like演算子で使えるワイルドカード記号

?   任意の 1 文字
*   任意の数の文字(0文字以上の文字なので、何もない場合もあり)
#   任意の 1 文字の数字 (全角・半角の数字いずれも含みます)
[charlist]   文字列 (charlist) に指定した文字の中の任意の 1 文字
[!charlist]   文字列 (charlist) に指定した文字以外の任意の 1 文字

上記は、ヘルプの記載を少し変更したものですが、この5種類です。

なので、「検索と置換」ダイアログで使える繰り返し記号 {繰り返し数字} のような記載はできません。

たとえば、4桁の半角数字を指定する場合

■Like演算子
[0-9][0-9][0-9][0-9]

■検索と置換ダイアログ(ワイルドカードを使用する)
[0-9]{4}

または、別の記載を使えば、以下のようになります。
この場合には、厳密に半角数字のみを検索できないので、注意が必要です。

かっこや記号と一緒に検索すれば、検索対象を広げつつもある程度絞り込めますから、工夫次第で便利に使えますね。

■Like演算子
#### (4桁の全角・半角数字)
???? (任意の4文字→数字以外も含みますね)

■検索と置換ダイアログ(ワイルドカードを使用する)
????
?{4}

こんなかんじで書けます。

「検索と置換」ダイアログでワイルドカードを用いた場合には、「#」の記号はワイルドカードとして使えません。

よって、任意の1文字として「?」を使っています。

・・・追記 16-07-26・・・・
上記では、[検索と置換]ダイアログボックスにて「ワイルドカードを使用する」で
検索する条件を探りました。ワイルドカードを使わずに、特殊文字で探す方法もあります。

■検索と置換ダイアログ(検索オプションをすべてオフ)
^#^#^#^#

上記の検索により、半角または全角の数字4桁を検索できます。
・・・・・・・・・・・・・・

ワイルドカードの使い方に慣れるために

誰も教えてくれなかった Word効率アップ術」に、Wordのワイルドカード検索・置換の事例が多数(60以上)掲載されています。

ぜひご覧ください。

実際に入力して体験するとより理解が深まると思います。

参考記事

知りたい操作がすぐわかる標準Word2003 全機能Bible (P.732にワイルドカードの説明あり)

Like演算子  (プログラムを掲載しました)

コメント

  • 5. Re:脚注番号の置換についてお知恵を拝借させてください
    >おちょこちょいさん

    追伸
    こちらの記事です。
    http://ameblo.jp/gidgeerock/entry-10779863723.html

  • 4. Re:脚注番号の置換についてお知恵を拝借させてください
    >おちょこちょいさん

    おはようございます。

    図の参照への回答の前に、こちらに回答してしまいました。脚注番号というものは初めてで、面白そうだったので(笑)。

    さて、昨夜、サッカーを観戦しながら書いたコードです。

    集中力が切れながらだったので、どうでしょうか。

    最初はうまくいっていても、繰り返すうちに誤動作をするようになって。。。

    原因追及する余裕がなく(サッカーに気持ちが集中していたので)、無理矢理作ったらプログラムが長くなりました。

    結局、今回紹介する形になりました。

    括弧をとる作業は、どろくさくカーソルを移動しながらやっています。

    もっと簡単な方法あるかも。

    ぜひ、試運転して、動作状況をご報告ください。

  • 3. 脚注番号の置換についてお知恵を拝借させてください
    新田さん、こんにちは。

    Wordで脚注(番号形式)を挿入した後、これに
    (丸かっこ)をつけるにはどうしたらよいか格闘しています。

    ネットで一般に公開されているのは、置換を使って

    ^f → 置換する検索文字
    (^&)→置換文字列を()でくくる

    という方法なのですが、これだと複数回にわたって実行すると、

    ((番号))や(((番号))

    のようにどんどんかっこが増えてしまい、
    いささか実用性に欠けます。

    そこで、検索文字列の「冒頭が”(”でない」と
    「末尾が”)”でない」という否定指定をしたいと思ったのですが、
    ワイルドカードの[!]というのは使用目的が違うようで、うまくできませんでした。

    もし、任意の冒頭文字と末尾文字を否定する方法があれば、
    お知恵を拝借させてください。

    ちなみに、^f(脚注番号)を(^&)に置換すると、
    私の環境では本文中の番号は(1)と置換されるのですが、
    脚注文字列のほうはなぜか置換されません…。

    よいアイディアがございましたら、よろしくお願いいたします。

    おちょこちょい返信する
  • 2. Re:奥が深い…
    >水野麻子さん

    Wordのワイルドカード機能は独自路線なんですね。

    秀丸や他の正規表現を知らないのであまりわかっておりませんが。

    もう少し掘り下げて、使いこなしていきたいです。

  • 1. 奥が深い…
    こんにちは。

    題材として取り上げて頂き、ありがとうございます。
    Wordのワイルドカード機能は、いわゆる正規表現とも少し違う独自路線を貫いていますが、マクロに記述する場合も奥が深そうですね。

    Replacement textなら使えても、Likeでは使えない書き方があるというか……。

    勉強になりました。
    ありがとうございました。

    水野麻子
トップへ戻る