• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA like演算子について)

VBAのlike演算子について

このQ&Aのポイント
  • VBAのlike演算子を使用したコードで、特定の条件を満たす行を処理しないようにする方法について質問です。
  • コードの一部である(2)の条件式で、エラーが発生してしまう問題が発生しています。
  • エラーメッセージ「パターン文字列が不正です」と表示され、処理が停止してしまいます。解決策を教えていただきたいです。

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

  • ベストアンサー
回答No.2

パターン内の"-"は「この文字からこの文字まで」を意味します。 例えば a-z A-Z 0-9 など。 If n Like "[5-7]" Then GoTo Skip_Line・・・・(1) このパターンは 5から7まで と言う意味なので、nが"5"と"6"と"7"に一致した時に真になります。 If n Like "[39-70]" Then GoTo Skip_Line・・・(2) このパターンは 3と、9から7までと、0 と言う意味なので「9から7って何や?判らん」と言う事になり「パターン文字列が不正です」のエラーになります。 もし"39"、"40"~"49"、"50"~"59"、"60"~"69"、"70"を対象にしたいなら If n = "39" or n Like "[4-6][0-9]" or n = "70" Then GoTo Skip_Line・・・(2) と書かなくてはいけません。 n Like "[4-6][0-9]" は「1文字目が"4"~"6"で、2文字目が"0"~"9"」と言う意味ですから「"40"~"49"、"50"~"59"、"60"~"69"」になります。 []で括るパターン文字列は「1文字のみが対象」だと言う事をお忘れ無く。 例えば「東京の電話番号」に一致するパターンは "03-[2-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]" となります。

yjtrha
質問者

お礼

ご丁寧な回答有難うございました。 非常に解りやすいご説明でした。!

その他の回答 (2)

回答No.3

てゆか、nはループ用の数値変数なんだから、ANo.1の回答のように「大小比較」すれば良いと思います。 Likeを使って「暗黙的に文字列に変換して、文字列比較」は無駄です。

yjtrha
質問者

お礼

回答ありがとうございました。 likeは文字列なんですね。

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

Likeは文字列の比較を行う演算子です、今回の様に数値で処理を分ける場合には使えません。 ステップ実行してみれば、(1)も(2)も望んだような動きをしていないのが判ります。 あまりGotoは使いたくありませんが、修正箇所を最小に押さえるならこれで良いと思います。 If n Like "[5-7]" Then GoTo Skip_Line・・・・(1) If n Like "[39-70]" Then GoTo Skip_Line・・・(2) ↓ If (n >= 5) And (n <= 7) Then GoTo Skip_Line If (n >= 39) And (n <= 70) Then GoTo Skip_Line

yjtrha
質問者

お礼

ありがとうございます。 当方VBA素人でお手数かけました。

関連するQ&A