まえがき
基本的にはIf文と同じですが、選択肢が多い場合は(Select)Case文の方が綺麗にプログラムが書けます。
Select Caseの処理フローは以下のイメージになります。
Selectと言っても並列で選ぶのでは無く、上の条件から順に判定されます。
基本的には、記載方法が違うだけで覚えるのも簡単ですので、違いだけ理解しておきましょう。
共通設定が変数
A = InputBox(“1から3までの数字を入力してください”) ‘変数Aを入力する |
Select Case A‘共通設定として変数Aを設定する |
Case 1 |
MsgBox “1だべ” ‘変数A=1の処理 |
Case 2 |
MsgBox “2ざます” ‘変数A=2の処理 |
Case Else |
MsgBox “どっちでもないでごわす” ‘変数Aが上記以外の処理 |
End Select |
[Select Case A]という変数を指定した例です。
If文の場合は毎回A=〇と記載しないといけないのに対して、Case文では最初に変数を設定する事で、選択肢では数字だけ記載すれば良いので、シンプルな表現となります。
またIF文では最初はIf、2番目以降はElseIfと表記が違いますが、Case文はCaseだけなので、簡単です。
共通設定がTrue
[Select Case True]という記載にすると条件が満たされた場合となるので、If文と同じように、それぞれ違う条件を設定できます。例を記載します。
A =1 ‘変数Aを1とする |
B =2 ‘変数Bを2とする |
Select Case True’True(真)の場合処理を実施 |
Case B =2 |
MsgBox “B は2だべ” ‘変数B=2の処理 |
Case A =1 |
MsgBox “Aは1ざます” ‘変数A=1の処理 |
Case Else |
MsgBox “どっちでもないでごわす” ‘上記以外の処理 |
End Select |
上のCaseから処理されるので、[B =2]の結果として、メッセージボックス[B は2だべ]が表示されて、他の分岐は判定されずに終了します。
Case文の条件式
Caseの条件文もIF文と全く同じです。
条件式 | 説明 |
A = B | AがBと一致する場合 |
A <> B | AがBと一致しない場合 |
A >= B | AがB以上の場合 |
A <= B | AがB以下の場合 |
A > B | AがBより大きい場合 |
A < B | AがBより小さい場合 |
範囲指定
範囲を指定する場合は以下のように[To]を入れます。
Case 1 To 2‘変数=1 ~ 2の場合 |
あいまい検索(Like)
IF文と同じで、Case文でもあいまい検索が可能です。
Case【変数】 Like “【頭の文字】*” Then |
Case【変数】 Like “*【真ん中の文字】*” Then |
Case 【変数】 Like “【後ろの文字】*” Then |
ポイントはLikeを使う事と、不明な文字列側に*(アスタリスク)を付けることです。*は正規表現で不明な文字列を表すのに使われ、このような使い方をする事が多いので覚えておきましょう。
AND条件
And条件にする事で2つ以上の条件を満たした場合に処理をさせる事ができます。
Case 【条件1】 And 【条件2】‘条件1と条件2が真の場合
CaseTrueでif文と同じようなAND条件の設定も可能です。
A = 1 |
B = 2 |
Select Case True ‘True(真)の場合処理を実施 |
Case A = 1 And B = 3 |
MsgBox “Aは1でB は2だべ” |
Case A = 1 And B = 2 |
MsgBox “Aは1でBは2ざます” |
Case Else |
MsgBox “どっちでもないでごわす” ‘上記以外の処理 |
End Select |
上の例ではAが1ですがBは2なので、1つ目のAND条件(A = 1 And B = 3)に一致せず、2つ目のAND条件(A = 1 And B = 2)となります。
OR条件
OR条件はIf文と異なり、Caseの後ろを[,](コンマ)で区切ります。
Select Case A‘変数をAとする |
Case 1, 2 |
MsgBox “A は1か2″ ‘変数=1 Or 変数=2の処理 |
Case 3, 4, 5 |
MsgBox “B は3か4か5″ ‘変数=3 Or 変数=4 Or 変数=5の処理 |
Case Else |
MsgBox “1~5以外” ‘変数が上記以外の処理 |
End Select |
OR条件は左から順に判定され、一致するものがあると右の値は判定されず、処理されます。よく使われる分岐を左に置くと処理が軽くなります。このように処理量を下げるように分岐の工夫をする事をショートサーキットと呼ぶこともあります。
CaseTrueでif文と同じようなOR条件の設定も可能です。
A = 1 |
B = 2 |
Select Case True ‘True(真)の場合処理を実施 |
Case B = 3 |
MsgBox “B は2だべ” ‘変数B=2の処理 |
Case A = 3, B = 2 |
MsgBox “Aは3、またはBは2ざます” |
Case Else |
MsgBox “どっちでもないでごわす” ‘上記以外の処理 |
End Select |
上の例ではBは2なので、2つ目のOR条件が左から順に判定され、A=3×→B=2〇となって条件に一致します。
入れ子設定
Case文もIf文と同様に、Case文の選択肢の中に、新たにCase文を入れる事で入れ子設定が可能です。
Case文の解説は以上です。
変数が同じ場合は省略できる事と、OR条件の記載方法が違うだけで、できる事はIf文と同じ事が分かると思います。
基本的には好みで良いと思いますが、選択肢が多い場合はCase文を使って、入れ子などの複雑な選択をさせる場合はIf文を使った方が、プログラムの見栄えは良くなると思います。