- ベストアンサー
Select Caseのisについて
- Select Case文におけるisの使い方について疑問があります。
- 質問のサンプルコードにおいて、Case Is < 3とCase i < 3は同じ意味ではありません。
- isは変数名ではなく、比較演算子の一部です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
まだ締め切られていないようなので。 >例えばこのようなサンプルの時、 >Case Is < 3 >の時は >Case 2 < 3 >Case i < 3 >と同じ意味ですよね? いいえ、違います。 同じ意味ではありません。 Select Case A Case B 何かの処理 End Select が If A = B then 何かの処理 End If や Select Case A Case Is = B 何かの処理 End Select と等価であることが理解できないと、ずっと理解できないままだと思います。 これはもう「Select Caseはこういう動作をする文なんだ」というレベルの話なんで、まずは命令リファレンスをみて、それを理解することから始めるしか無いですね。 あと、蛇足ながら。 i = 2 Select Case True Case i < 3 Debug.Print "3以下です" Case Else Debug.Print "3以上です" End Select とすれば、一応は「isを使った場合」と同じ動作をするでしょうね。 Boolean型とSelect Caseの動作をきちんと理解していれば、何故これがそういう動きをするのかも理解できるはず。 本来Boolean型同士の比較は、あまり行儀の良いプログラムではないのですが、まあ、ご愛嬌ということで。
その他の回答 (1)
- okgoripon
- ベストアンサー率44% (1141/2548)
そもそも、数値の比較が表示されるメッセージと食い違っているんですが。 「< 3」だと「3より小さい」、つまり「3未満」です。 Longは整数なので、実際には「< 3」は「2以下」になります。 あと「変数を使った場合」は明らかにバグってます。 Select Case HOGEHOGE Case FUGAFUGA End Select と書かれていた場合「Case FUGAFUGA」は「HOGEHOGEとFUGAFUGAを比較して等しい」という条件です。 If文で書くなら「If HOGEHOGE = FUGAFUGA Then」ですね。 Select Case i Case i < 3 End Select と書かれていた場合「Case i < 3」は同様に「iとi < 3を比較して等しい」という条件です。 If文で書くなら「If i = (i < 3) Then」ということになりますが、iはLong、(i < 3)はBooleanで型が違うため、比較してもまともな結果にはなりません。
お礼
回答ありがとうございました。
お礼
回答ありがとうございました。