こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

[と”の意味を教えてください。

http://okwave.jp/qa/q5945112.html
を参考に、
Sub test1()
Dim i As Integer
i = 2
If i Like "[1-3]" Then
MsgBox i & "です"
End If
End Sub

Sub test2()
Dim i As Integer
i = 2
If i Like "[1-5]" Then
MsgBox i & "です"
End If
End Sub

Sub test3()
Dim i As Integer
i = 2
If i Like "[1-10]" Then
MsgBox i & "です"
End If
End Sub
を作ったのですが、
test3はうまく行きません。

意味としては、
iが
"[1-10]"の中の数字の間のどれかであれば、
MsgBox i & "です"
を表示させたいです。

でも上記のマクロを実行させた結果、
"[1-10]"の中で計算が行われてるのではないかと思います。

だから、test3は、1-10=-9
という事になり、msgboxが反応しないのではないかと思っています。

でもそうすると、test2だって
"[1-5]"は、-4になって、i=2とは違う値なのに
なぜMsgBoxが反応してしまうのかわかりません。

でもそもそも[と”の意味が分からないのでそこから教えていただけませんか?

“の意味、は二つで挟んで文字列にすると思っています。

投稿日時 - 2012-10-15 21:53:32

QNo.7750346

困ってます

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

No.2です!
前回の投稿で間違いがありました。

>>If i Like "[1-9 10]" Then
は10の場合まったく反応しませんね!

仮に1~13までの範囲を無理やりLIKE演算子でやると
>If i Like "[1-9]" Or i Like 1 & "[0-3]" Then
のような感じでないとダメのようです。

という訳で、今回の質問にあるように 1~10 だと
>If i Like "[1-9]" Or i = 10 Then
もしくは
>If i Like "[1-9]" Or i Like 10 Then
といった感じでしょうか?

これならわざわざLIKE演算子を使うより、単純に
>If i >= 1 And i <= 10 Then
の方が簡単ですね!m(_ _)m

投稿日時 - 2012-10-15 23:24:13

お礼

likeで行うのは難しそうなので素直にandを使うようにします。
再度ありがとうございました。

投稿日時 - 2012-10-16 20:32:37

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

こんばんは!
LIKE演算子を使う場合

[ ]でくくられている前後に必ずダブルクォーテーションがついています。
すなわち文字列扱いで、「あいまい検索」の場合に使用することが多いと思います。
たとえば
A-Z(A~Z)
a-z(a~z)
0-9(0~9)
といったような感じで・・・

質問にある"[1-5]"は
「1マイナス5」という意味ではなく、1・2・3・4・5 のどれかと一致すれば「真」となります。

ハイフンでつながっている場合は一文字ずつの検索となりますので、
どうしてもLIKE演算子を使って 1~10までを指定したいのであれば

>If i Like "[1-9 10]" Then

のようにすれば可能だと思いますが、数値の場合は

>If i >= 1 And i <= 10 Then

のような感じの方が好ましいのではないかと思います。(←あくまで私的見解です)

この程度で参考になりますかね?m(_ _)m

投稿日時 - 2012-10-15 22:47:26

お礼

[]とダブルコクォーテーションはセットなのですか。
1さんと同様andを使うのが良いようですね。
とても参考になりました!ありがとうございました。

投稿日時 - 2012-10-16 20:32:23

ANo.1

>でも上記のマクロを実行させた結果、
>"[1-10]"の中で計算が行われてるのではないかと思います。
>
>だから、test3は、1-10=-9
>という事になり、msgboxが反応しないのではないかと思っています。

これはありません。
仮に、そうなっているのなら"[1-5]"の時も1-5=-4という計算をしていなければおかしいですから。


質問者さんがやっている方法で上手く処理されないのはLike演算子の仕様の問題っぽいですね。
"[1-9]"とか"[0-9]"でやってみると何の問題も無く処理されますので、Like演算子で数字を判断する場合、[]の中に入れて判定できるのは一桁の数字までなんでしょうね。


そもそも、何でLike演算子なんかを使っているのかが分かりません。
変数の中身が1~10の範囲なのかの確認ならIf文でも簡単に出来ると思うのですが……

If i>=1 And i<=10 Then

「If i Like "[1-10]" Then」という行を上記のように書き換えるだけで解決しますよ。

投稿日時 - 2012-10-15 22:35:23

お礼

難しいですが

>Like演算子で数字を判断する場合、
>[]の中に入れて判定できるのは一桁の数字までなんでしょうね。

が理由のようですね。

andを使うのが良いようですね。ありがとうございました。

投稿日時 - 2012-10-16 20:32:04

あなたにオススメの質問