【条件分岐】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を用いて、次の問い答えなさい。

  1. セル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)

  2. セル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を用いて処理を書きます。

  3. セル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種類に分けて処理をさせています。

  4. セル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
      
  5. セルB5の値を基準にセルC5に次の条件で入力しなさい。

    • セルB5が"阿部"か"伊澤"の時、セルC5に"合格"と入力

      【解答例】

      Sub Test_SelectCase5()
          Select Case Cells(5, 2)
              Case "阿部", "伊澤"
                  Cells(5, 3) = "合格"
          End Select
      End Sub
      

      【解説】

      [,](半角カンマ)で区切ることによって、Orのように「AもしくはB」の時の処理が可能です。

関連リンク

ページの先頭へ