【条件分岐】Select Caseの使い方
今回の目標
- Select Caseについて理解を深める
- [Is 比較演算子]や[To]を用いて条件分岐の処理をできるようになる
説明
事前準備
事前準備として、セルA1に[10]を入力してください。
今回はこのセルA1を用いて説明します。
特定条件時のみ実行する(Select Case / End Select)
基本構文です。
Select Case 比較対象
Case Is 条件①
比較対象と条件①を比較し、真の時に行う処理
End Select
条件には、比較対象の変数やセルを記載する必要がありません。
下記サンプルは、セルA1が10の時にセルB1に「セルA1の値は10です。」と記入するプログラムです。
Sub Sample_SelectCase1()
Select Case Cells(1, 1)
Case Is = 10
Cells(1, 2) = "セルA1の値は10です。"
End Select
End Sub
上記サンプルの通り、Select Case文では「Case Is = 10」と記載します。
サンプルでは「=」でしたが、各比較演算子(<, <=, >, >=)を用いて比較することができます。
If文と同様に「条件①に一致しないかつ、条件②に一致する」場合の処理も可能です。
2つ目の条件を記載する時は、「Case 条件②」と記載します。
Sub Sample_SelectCase2()
Select Case Cells(1, 1)
Case Is = 10
Cells(1, 2) = "セルA1の値は10です。"
Case Is < 10
Cells(1, 2) = "セルA1の値は10未満です。"
End Select
End Sub
「一致しているか」を確認するときに「=」を使用しますが、この時の「Case Is = 値」は「Case 値」と省略することができます。
Sub Sample_SelectCase3()
Select Case Cells(1, 1)
Case 10 ' ←「Case Is = 10」と同義
Cells(1, 2) = "セルA1の値は10です。"
Case 20 ' ←「Case Is = 20」と同義
Cells(1, 2) = "セルA1の値は20です。"
End Select
End Sub
特定条件時でない場合のみ実行する (Case Else)
条件①、条件②・・・と比較し、それら全てに一致しなかった場合の命令です。
基本構文です。
Select Case 比較対象
Case Is 条件①
比較対象と条件①を比較し、真の時に行う処理
・・・
Case Else
比較対象と条件①、条件②・・・を比較し、全条件が偽の時に行う処理
End Select
サンプルです。
Sub Sample_SelectCase4()
Select Case Cells(1, 1)
Case Is = 10
Cells(1, 2) = "セルA1の値は10です。"
Case 20 ' ←「Case Is = 20」と同義
Cells(1, 2) = "セルA1の値は20です。"
Case Else
Cells(1, 2) = "セルA1の値は10でも20でもありません。"
End Select
End Sub
10以上20以下(Case A To B)
「10以上20以下」等の数値の範囲を指定するとき、If文では「And」を使用する等の工夫が必要でした。しかし、Select Caseではもっとシンプルに書けます。
基本構文です。
Select Case 比較対象
Case 最低値 To 最大値
比較対象と数値の範囲内なら行う処理
End Select
このようにCase 最低値 To 最大値と記載すると最低値から最大値の場合の処理を書けます。
サンプルです。
Sub Sample_SelectCase5()
Select Case Cells(1, 1)
Case 0 To 30
Cells(1, 2) = "赤点です"
End Select
End Sub
Elseを使用して処理を書くこともできます。
Sub Sample_SelectCase6()
Select Case Cells(1, 1)
Case 0 To 30
Cells(1, 2) = "赤点です"
Case 31 To 100
Cells(1, 2) = "合格点です"
Case Else
Cells(1, 2) = "不正な値:点数を確認して下さい"
End Select
End Sub
10または20(Case A, B)
「10または20」等のどちらかが一致しているときの処理を書くとき、If文では「Or」を使用ました。Select Caseではシンプルに書けます。
基本構文です。
Select Case 比較対象
Case 条件①, 条件②
比較対象と条件①,条件②を比較し、どちらかが真の時に行う処理
End Select
1つ目の条件の後に[,](半角カンマ)を書き、続けて2つ目の条件書くと、どちらかが一致したときの処理になります。
サンプルです。
Sub Sample_SelectCase7()
Select Case Cells(1, 1)
Case 10, 20
Cells(1, 2) = "10か20です"
Case Else
Cells(1, 2) = "10か20以外です"
End Select
End Sub
【番外編】xより大きいかつy未満
最初にお伝えしたいのは、x以上かつy未満や、xより大きいかつy以下、xより大きいかつy未満といった、範囲の指定で条件に「より大きい」か「未満」を指定する場合はIf文を使用してください。
読み飛ばして、確認テストを行っても問題ありません。
Select Case文でも可能なので説明しますが、一般的でないためです。
xより大きいかy未満を使用する場合は「To」を使用することはできません。
「To」は『x以上かつy未満』だからです。Andを用いて自力で条件に一致しているか確認する必要があります。
Select Case True
Case 条件① And 条件②
条件①と条件②が共に真の時に行う処理
End Select
サンプルです。
'セルA1が10以上かつ20未満の時に処理
Sub Sample_SelectCase7()
Select Case True
Case 10 <= Cells(1, 1) And Cells(1, 1) < 20
Cells(1, 2) = "セルA1は10以上かつ20未満です"
End Select
End Sub
確認テスト
Selectを用いて、次の問い答えなさい。
-
セルB1の値を基準にセルC1に次の条件で入力しなさい。
セルB1が"田中"の時、セルC1に"合格"と入力
【解答例1】
Sub Test_SelectCase1_1() Select Case Cells(1, 2) Case Is = "田中" Cells(1, 3) = "合格" End Select End Sub
【解答例2】
Sub Test_SelectCase1_2() Select Case Cells(1, 2) Case "田中" Cells(1, 3) = "合格" End Select End Sub
【解説】
Select Case文の基本です。
解答例2では、[Is =]を省略しています。
間違えてしまった方は次を見直しましょう。
特定条件時のみ実行する(Select Case / End Select)
-
セルB2の値を基準にセルC2に次の条件で入力しなさい。
セルB2が29より大きい時、セルC2に"合格"と入力
-
セルB2がそれ以外の時、セルC2に"不合格"と入力
【解答例1】
Sub Test_SelectCase2() Select Case Cells(2, 2) Case Is > 29 Cells(2, 3) = "合格" Case Else Cells(2, 3) = "不合格" End Select End Sub
【解説】
Select Case文に比較演算子とElseを用いて処理を書きます。
-
セルB3の値を基準にセルC3に次の条件で入力しなさい。
なお、セルB3は必ず0以上100以下の整数が入力されるとする。セルB3が30以下の時、セルB3に"不合格"と入力
セルB3が100の時、セルB3に"満点合格"と入力
-
セルB3がそれ以外の時、セルC3に"合格"と入力
【解答例1】
Sub Test_SelectCase3_1() Select Case Cells(3, 2) Case Is <= 30 Cells(3, 3) = "不合格" Case 100 Cells(3, 3) = "満点合格" Case Else Cells(3, 3) = "合格" End Select End Sub
【解答例2】
Sub Test_SelectCase3_2() Select Case Cells(3, 2) Case 0 To 30 Cells(3, 3) = "不合格" Case 31 To 99 Cells(3, 3) = "合格" Case 100 Cells(3, 3) = "満点合格" End Select End Sub
【解説】
解答例1では、Toを用いて設問の条件の通りCaseで処理を分岐させています。
解答例2では、問題文に「0以上100以下の整数」とあることに注目し、0~30と31~99、100の3種類に分けて処理をさせています。
-
セルB4の値を基準にセルC4に次の条件で入力しなさい。
セルB4が0以上29以下の時、セルC4に"不可"と入力
セルB4が30以上54以下の時、セルC4に"可"と入力
セルB4が55以上74以下の時、セルC4に"良"と入力
セルB4が75以上100以下の時、セルC4に"優"と入力
-
セルB4がそれ以外の時、セルC4に"採点ミス"と入力
【解答例】
Sub Test_SelectCase4() Select Case Cells(4, 2) Case 0 To 29 Cells(4, 3) = "不可" Case 30 To 54 Cells(4, 3) = "可" Case 55 To 74 Cells(4, 3) = "良" Case 75 To 100 Cells(4, 3) = "優" Case Else Cells(4, 3) = "採点ミス" End Select End Sub
【解説】
Toを用いて、問題文の通りに処理を分岐させています。
Select CaseではToで済むため、「●以上●以下」の場合は読みやすいかと思います。ただし「10より大きいかつ20以下」や「10以上かつ20未満」など範囲のどちらかに『より大きい』か『未満』が指定されている場合は、Select構文の中にSelect構文を入れる必要があります。この場合は、If文を使用してください。スッキリすると思います。
以下2つは同じ「10より大きく、20 以下か」を判断するプログラムです。どちらが見やすいかは明確でしょう。● Selectを使用した、10より大きく、20 以下を判断する処理
Sub Test_SelectCase4_1() Dim num As Long num = 21 Select Case num Case Is > 10 Select Case num Case Is <= 20 MsgBox "変数numは、10より大きく、20 以下" Case Else MsgBox "対象外です。" End Select Case Else MsgBox "対象外です。" End Select End Sub
● Ifを使用した、10より大きく、20 以下を判断する処理
Sub Test_SelectCase4_2() Dim num As Long num = 11 If 10 < num And num <= 20 Then MsgBox "変数numは、10より大きく、20 以下" Else MsgBox "対象外です。" End If End Sub
-
セルB5の値を基準にセルC5に次の条件で入力しなさい。
-
セルB5が"阿部"か"伊澤"の時、セルC5に"合格"と入力
【解答例】
Sub Test_SelectCase5() Select Case Cells(5, 2) Case "阿部", "伊澤" Cells(5, 3) = "合格" End Select End Sub
【解説】
[,](半角カンマ)で区切ることによって、Orのように「AもしくはB」の時の処理が可能です。
-