質問: "[test]" if mystr like "*[*" then msgbox "[が含まれます" end if end sub だと、実行時エラー93 パターン文字列が不正ですになります。 こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?
回答: #1、2、cjです。 パターンマッチングのお話だと思い、お応えしているのですが、、、。 ちょっと片手落ちだった気もするので、一応補足を加えます。 if mystr like "*[[]*]*" then のように書けば、[と]の組み合わせを同時にマッチングできます。 各種の正規表現やexcel一般機能(関数等)には メタ文字(like演算子の角括弧のように意味を持つ特殊文字)を 文字列比較する為にエスケープ文字(^や\や~を特殊文字の前に付加)が用意されていますが、 like演算子の場合はエスケープ文字がありません。 (これ↑、はっきり書いた方が良かったですね) #2で引用したvbaヘルプのメモのように、 エスケープする為に角括弧[]で括る必要があります。 正規表現などに比べればマッチングが制限されているのも確かです。 特長を示す例としては if mystr like "*[[]t*]*" then のように判別することで、 mystr = "[test]" なら マッチするのでtrue mystr = "[rest]" や mystr = "[test" や mystr = "test]" 等なら マッチしないのでfalse というような使い方をします。 ただlike演算子のパターンマッチングは万能ではありませんから、 場合によっては正規表現(vbaの場合はvbscriptのregexp)を用いて より精度の高いパターンマッチングが求められるケースもあることでしょう。 "角カッコが含まれてるかどうか" だけ、を限定的な意味で捉えれば、それは検索ですから、 instr関数を使って、戻り値が[0でない場合、0である場合] といった具合に判別するのは、非常に優れた検索方法です。 目的に適うツールを選べるように、 基本的なことは色々知っておいた方がいい、ということになるのでしょうか。