• ベストアンサー

角カッコが含まれてるかどうかを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

  • like演算子で大カッコがあるか判断するには

    Sub test() Dim R As String R = "あ[あ]あ" If R Like "[" Then MsgBox "文字の中に大カッコがあります" End If End Sub を実行すると、 実行時エラーでパターン文字列が不正です。 になります。 If R Like "(" Then なら、問題なく動きます。 どうすればいいでしょうか?ご回答よろしくお願いします。

  • 数値かどうかを取得したい IsNumberではダメ

    Sub Macro2() Dim mystr As String mystr = "1" If IsDate(mystr) = False Then MsgBox "NO" End If End Sub これなら日付型かどうかを取得できるのに、 Sub Macro1() Dim mystr As String mystr = "1" If IsNumber(mystr) = False Then MsgBox "NO" End If End Sub だと、IsNumberがコンパイルエラーになります。 変数に入っている値が数値として評価できるかを取得する方法を教えてください。

  • ifステートメントで、[が含まれるかどうかを調べた

    ifステートメントで、[が含まれるかどうかを調べたいのですが ****************************** Sub test1() Dim myStr As String myStr = "[aaa]" If myStr Like "*[*" Then MsgBox "[を含んでいます。" End If End Sub ****************************** をやろうとすると 「実行時エラー93 パターン文字列が不正です」 となってしまいます。 ヘルプを見ると ************************************************************ 検索の Like 演算子で指定されているパターン文字列が無効です。 エラーの原因と対処方法を次に示します。 たとえば、文字リスト式 [a-b は、右かっこ (]) がないため、無効です。 リスト式の文字を確認します。 詳細については、目的の項目を選択して F1 キー (Windows) または Help キー (Macintosh) を押してください。 ************************************************************ との事なので、 If myStr Like "*[*]" Then としたら、問題なくできましたが、 [だけが含まれているかどうかを調べることは不可能なのでしょうか?

  • VBA 変数にアスタリスクが含んでるかどうか

    変数にアスタリスクが含んでるかどうかをIFステートメントで取得するには? Sub test() Dim mystr As String mystr = "*/" If mystr Like "*" Then MsgBox "mystrはアスタリスクを含んでます。" End If End Sub このようなことをしたい場合、 mystr = "*/" でも mystr = "/" でも、結局は*が、どの文字でも含まれると認識してしまいます。 変数にアスタリスクが含まれてるかどうかを判定する方法を教えてください。

  • 変数の中身がアルファベットだけなのか取得するには

    変数がアルファベットだけか取得するには? Sub test() Dim mystr As String mystr = "abc" If ??? Then MsgBox "アルファベットだけです" End If End Sub のように、変数の中身がアルファベットだけなのか取得するにはどうすればいいでしょうか? ひらがな、カタカナ、漢字、記号を含んでいるかどうかを評価したいです。

  • 【1】と【2】のvbaは同じ意味ですか?

    【1】 Option Explicit Sub test1() Call test2("aaa") End Sub Sub test2(MyStr As String) MsgBox MyStr End Sub 【2】 Option Explicit Dim MyStr As String Sub test1() MyStr = "aaa" Call test2 End Sub Sub test2() MsgBox MyStr End Sub 結果は同じですが、中身が違います。 今後コードを作っていく上で どちらの方式の方が良いのでしょうか?

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

  • コードの添削お願いします(変数エラー)

    Option Explicit Private Sub CommandButton1_Click() Dim myStr As String If myStr <> "" Then myStr = TextBox.Value Label1.Caption = LTrim(myStr) Label2.Caption = RTrim(myStr) Label3.Caption = Trim(myStr) Else MsgBox "終了" End If End Sub 変数のエラーが出ますが、何処がおかしいですか? 宜しくお願い致します。

  • 「IsText」の使い方を教えてください

    例えば Sub tset1() Dim mystr As String mystr = "aaa" If IsNumeric(mystr) = True Then MsgBox "数値です" End If If IsText(mystr) = True Then MsgBox "文字です" End If End Sub と言うコードを作ったのですが、 数値かどうかはIsNumericで判断できますが 文字列かどうかを判断したい時にIsStringはないようなのでIsTextを使うのかな? とおもったのですが、コンパイルエラーになるようです。 IsNumericはInformationクラスのようですが IsTextはWorksheetFunctionクラスのようです。 だからIsNumericとIsTextの使い方が違うのでしょうか? 文字かどうか評価するIsTextの使い方をご教授ください。

  • Select Caseでlikeを使うには?

    Sub test() Dim s As String s = "aa*@yahoo.co.jp" Select Case s Case like "*yahoo*" MsgBox "yahoo" End Select End Sub をすると、コンパイルエラーになるのですが 「yahoo」と言う文字を含むのなら とするにはどうすればいいでしょう?

専門家に質問してみよう