【VBAスタンダード対策】Select Caseによる「数値範囲」の分岐構造を攻略!
複数の条件で綺麗に分岐させたいときに便利な Select Case。単一の値だけでなく、「〇〜〇の間」や「〇より大きい」といった数値の範囲を判定する際の、VBA特有の構文構造と判定の優先順位をマスターしましょう。
1. 問題:数値範囲の指定と境界値の判定
【 問題 】 下記のコードを実行して JudgeScore(10) を呼び出した際、メッセージボックスに表示される文字列として正しいものはどれでしょうか?
Sub Test()
Call JudgeScore(10)
End Sub
Sub JudgeScore(score As Integer)
Select Case score
Case 1 To 5
MsgBox "ランクC"
Case 5 To 10
MsgBox "ランクB"
Case Is > 10
MsgBox "ランクA"
Case Else
MsgBox "対象外"
End Select
End Sub
Call JudgeScore(10)
End Sub
Sub JudgeScore(score As Integer)
Select Case score
Case 1 To 5
MsgBox "ランクC"
Case 5 To 10
MsgBox "ランクB"
Case Is > 10
MsgBox "ランクA"
Case Else
MsgBox "対象外"
End Select
End Sub
① 「ランクB」が表示される
② 「ランクA」が表示される
③ 「ランクB」が表示された後、「ランクA」も表示される
④ 構文エラー(コンパイルエラー)が発生する
2. 正解:Select Case の範囲判定に関する正解
正解: ① 「ランクB」が表示される
3. 解説:「上から順に、最初に一致した場所だけ」動く構造
Select Case の範囲指定には、文法ルールと処理の流れ(フロー)に関する重要な構造的特徴が3つあります。
[ Select Case の構造ルール ]
1. 〇〜〇の範囲は「To」を使う
2. 不等号を使うときは「Is」が必要
「10より大きい」を表現する場合、単に
3. 最初に一致した Case だけが実行される
【超重要】 もし
1. 〇〜〇の範囲は「To」を使う
Case 1 To 5 のように記述します。このとき、開始値と終了値(1と5)のどちらも条件に含まれる(以下・以上)という構造になります。そのため、5 To 10 には「10」もピッタリ含まれます。2. 不等号を使うときは「Is」が必要
「10より大きい」を表現する場合、単に
Case > 10 と書くとエラーになります。必ず Is キーワードを補って Case Is > 10 と書くのがVBAの絶対ルールです。(※Isは検査対象の変数を指す身代わり構造です)3. 最初に一致した Case だけが実行される
【超重要】 もし
JudgeScore(5) を呼び出した場合、5は「1 To 5」と「5 To 10」の両方に合致してしまいますが、VBAは上から順に判定し、最初に一致した段階でSelect Case全体を脱出する構造になっています(結果はランクCになります)。ここが試験に出る!: スタンダード試験では、不等号を使うときに Is を書き忘れていないか、また Case 1, 2, 3 のような「カンマ区切り(いずれかに一致)」と To による「範囲指定」が正しく使い分けられているかが厳しく問われます。
4. まとめ
「範囲はTo、不等号はIs、一致したら即脱出」。この3つの構造ルールを頭に入れておけば、複雑な多方向分岐もすっきりと読みやすいマクロに落とし込むことができます。If文の連打に頼らない、スマートな条件分岐を構築しましょう。
PR