• ベストアンサー

角カッコが含まれてるかどうかをlikeで取得

したいのですが、どうやらエラーになるようです。 Sub test() Dim mystr As String mystr = "[test]" If mystr Like "*[*" Then MsgBox "[が含まれます" End If End Sub だと、実行時エラー93 パターン文字列が不正ですになります。 こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?

質問者が選んだベストアンサー

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.5

#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である場合] といった具合に判別するのは、非常に優れた検索方法です。 目的に適うツールを選べるように、 基本的なことは色々知っておいた方がいい、ということになるのでしょうか。

atsbivbtosywd
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

こんにちは! どうしてもlike演算子でないとダメですか? Like演算子に関してはすでにNo.1さんが回答ずみですので、 質問にあるような問題が出てくると思います。 別案として >If Len(mystr) > Len(Replace(mystr, "[", "")) Then のようにLike演算子を使用しない方法ではどうでしょうか?m(_ _)m

atsbivbtosywd
質問者

お礼

ありがとうございました。

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

こんにちは、likeでは回答が出ておりますので >こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか? InStr 関数を使った方法です。参考に mystr = "[test]" If InStr(mystr, "[") Then   MsgBox "[が含まれます" End If

atsbivbtosywd
質問者

お礼

ありがとうございました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1、cjです。追加レスです。 VBAヘルプの Like演算子を引くと、正にご質問への答えが説明されていました。 以下VBAヘルプより引用(改行は筆者) |メモ 特殊文字の左角かっこ ([)、疑問符 (?)、数値記号 (#)、およびアスタリスク (*) を |文字列比較するには、これらの文字を角かっこで囲みます。 |右角かっこ (]) をワイルドカードとしてではなくその文字自体として文字列比較を行うときには、 |右角かっこを他の文字と共に角かっこで囲んでリストの中に指定することはできません。 |右角かっこは、文字のリストに入れずに単独で指定すると、 |独立した文字として、文字列の中の文字と比較できます。 以上引用

atsbivbtosywd
質問者

お礼

ありがとうございました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 こんな感じで。 Sub test()   Dim mystr As String   mystr = "[test]"   If mystr Like "*[[]*" Then     MsgBox "[が含まれます"   End If End Sub

atsbivbtosywd
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう