9-2.条件分岐② Select Caseステートメント

今回は、Select Caseステートメントについて説明します。

Select Caseステートメント

基本構文

○構文
Select Case 判定対象
 Case 条件1
  判定対象が条件1を満たす場合の処理
 Case 条件2
  判定対象が条件2を満たす場合の処理
 Case 条件3
・・・
 Case Else
  いずれの条件も満たさない場合の処理
End Select

○処理
判定対象がいずれかのCase文の条件を満たす場合、そのCase文の処理を実行します。
いずれのCase文の条件も満たさない場合、Case Else文の処理を実行します。Case Else文は省略可能です。

Case文の条件は上から順番に判定されるので、条件1と条件2いずれも満たす場合は、条件1の処理のみ実行されます。

判定対象には、値や変数、オブジェクト、Bool値(True/False)などを指定できます。

例えば、判定対象に変数を指定し、その変数の値に応じて条件分岐する場合は、以下のように記述します。

Sub サンプル()
    
    Dim v As Long
    v = 3
    
    Select Case v  '判定対象は変数v
        Case Is < 3  '条件1:vが3より小さいか
            MsgBox "3より小さい"
        Case 3    '条件2:vが3と等しい
            MsgBox v
        Case Else  'いずれの条件も満たさない
            MsgBox "3より大きい"
    End Select
    
End Sub

Ifステートメントで記述することも可能ですが、単一の判定対象に対して複数の条件分岐をしたい場合は、Select Caseステートメントの方が記述が簡単になります。

条件の記述方法

Case文に記述する条件は、条件の内容によって記述方法が異なります。

大小関係の条件の場合、Is演算子を記述する必要があります。
また、条件を範囲指定や複数比較する場合は、Toや,(カンマ)を記述します。

下表に条件ごとの記述方法を示します。

記述方法条件
Case 33と等しい
Case 1 To 51以上5以下(範囲指定)
Case 1,3,51か3か5(複数比較)
Case Is <33より小さい
Case Is <=33以下
Case Is >33より大きい
Case Is >=33以上

サンプルコード

Sub サンプル1()
    
    Dim str As String
    str = "A"
    
    Select Case str
        Case "A"
            MsgBox "Aです"
        Case Else
            MsgBox "Aではありません"
    End Select
    
    Select Case str
        Case "A" To "Z"
            MsgBox "アルファベット大文字を含みます"
        Case "a" To "z"
            MsgBox "アルファベット小文字を含みます"
    End Select
    
End Sub
Sub サンプル2()
    
    Select Case True
        Case Range("A1").Value = ""
            MsgBox "A1セルは空白です"
        Case IsNumeric(Range("A1").Value)
            MsgBox "A1セルに数値が入力されています"
        Case Else
            MsgBox "A1セルに数値以外が入力されています"
    End Select
    
End Sub

コメント