プロが教えるわが家の防犯対策術!

したいのですが、どうやらエラーになるようです。

Sub test()
Dim mystr As String

mystr = "[test]"
If mystr Like "*[*" Then
MsgBox "[が含まれます"
End If

End Sub


だと、実行時エラー93 パターン文字列が不正ですになります。

こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?

A 回答 (5件)

こんにちは。


こんな感じで。

Sub test()
  Dim mystr As String

  mystr = "[test]"
  If mystr Like "*[[]*" Then
    MsgBox "[が含まれます"
  End If

End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 21:18

#1、cjです。

追加レスです。

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

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

お礼日時:2013/10/17 21:18

こんにちは、likeでは回答が出ておりますので


>こういうように各カッコが含まれてるかどうかを取得するにはどうすればいいですか?
InStr 関数を使った方法です。参考に

mystr = "[test]"
If InStr(mystr, "[") Then
  MsgBox "[が含まれます"
End If
    • good
    • 1
この回答へのお礼

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

お礼日時:2013/10/17 21:18

こんにちは!



どうしてもlike演算子でないとダメですか?
Like演算子に関してはすでにNo.1さんが回答ずみですので、
質問にあるような問題が出てくると思います。

別案として
>If Len(mystr) > Len(Replace(mystr, "[", "")) Then
のようにLike演算子を使用しない方法ではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 21:18

#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である場合]
といった具合に判別するのは、非常に優れた検索方法です。

目的に適うツールを選べるように、
基本的なことは色々知っておいた方がいい、ということになるのでしょうか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/10/17 21:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています