Select...Case ステートメント (Visual Basic)

式の値に応じて、いくつかのステートメント グループのいずれかを実行します。

構文

Select [ Case ] testexpression  
    [ Case expressionlist  
        [ statements ] ]  
    [ Case Else  
        [ elsestatements ] ]  
End Select  

指定項目

用語 定義
testexpression 必須です。 式。 基本データ型 (BooleanByteCharDateDoubleDecimalIntegerLongObjectSByteShortSingleStringUIntegerULong、および UShort) のいずれかとして評価される必要があります。
expressionlist Case ステートメントには必ず指定します。 testexpression の一致する値を表す式の句の一覧。 複数の式の句を指定するときは、コンマで区切ります。 各句には、次のいずれかの形式を使用できます。

- expression1Toexpression2
- [ Is ] comparisonoperatorexpression
- 式 (expression)

To キーワードを使用して、testexpression の一致する値の範囲の境界を指定します。 expression1 の値は expression2 の値以下である必要があります。

比較演算子 (=<><<=>、または >=) と共に Is キーワードを使用して、testexpression の一致する値に対する制限を指定します。 Is キーワードが指定されていない場合は、自動的に comparisonoperator の前に挿入されます。

expression のみを指定する形式は、Is 形式の特殊なケースとして扱われます。ここで、comparisonoperator は等号 (=) です。 この形式は testexpression = expression として評価されます。

expressionlist の式は、testexpression の型に暗黙的に変換可能であり、一緒に使用される 2 つの型に対して適切な comparisonoperator が有効であれば、任意のデータ型にすることができます。
statements 任意。 testexpressionexpressionlist 内のいずれかの句と一致する場合に実行される、Case の後の 1 つ以上のステートメント。
elsestatements 任意。 testexpression が どの Case ステートメントの expressionlist 内のどの句とも一致しない場合に実行される、Case Else の後の 1 つ以上のステートメント。
End Select Select...Case コンストラクションの定義を終了します。

Remarks

testexpressionCaseexpressionlist 句と一致する場合、その Case ステートメントの後のステートメントは、次の CaseCase Else、または End Select ステートメントまで実行されます。 その後、制御は End Select の後のステートメントに渡されます。 testexpression が複数の Case 句の expressionlist 句と一致する場合は、最初の一致の後のステートメントのみが実行されます。

Case Else ステートメントを使用して、他のいずれかの Case ステートメントで testexpression 句と expressionlist 句の間に一致が検出されなかった場合に実行する elsestatements を導入します。 必須ではありませんが、予期しない testexpression 値を処理するために、Select Case コンストラクションに Case Else ステートメントを指定することをお勧めします。 Caseexpressionlist 句が testexpression に一致せず、Case Else ステートメントが存在しない場合、制御は End Select の後のステートメントに渡されます。

Case 句では、複数の式または範囲を使用できます。 たとえば、次の行は有効です。

Case 1 To 4, 7 To 9, 11, 13, Is > maxNumber

注意

Case および Case Else ステートメントで使用される Is キーワードは、オブジェクト参照の比較に使用される Is Operator と同じではありません。

文字列の範囲と複数の式を指定できます。 次の例では、Case は、"apples" と完全に等しいか、アルファベット順の "nuts" と "soup" の間の値を持つか、testItem の現在の値とまったく同じ値が含まれている任意の文字列に一致します。

Case "apples", "nuts" To "soup", testItem

Option Compare の設定は、文字列比較に影響を与える可能性があります。 Option Compare Text では、文字列 "Apples" と "apples" は等しいものとして比較されますが、Option Compare Binary ではこれらは等しくありません。

注意

複数の句を持つ Case ステートメントでは、ショートサーキットと呼ばれる動作が発生する可能性があります。 Visual Basic では句が左から右に評価され、いずれかが testexpression と一致する場合、残りの句は評価されません。 ショートサーキットはパフォーマンスを向上させることができますが、expressionlist 内のすべての式を評価する必要がある場合は、予期しない結果が生じる可能性があります。 ショートサーキットの詳細については、ブール式に関するページを参照してください。

Case または Case Else ステートメント ブロック内のコードがブロック内のステートメントをこれ以上実行する必要がない場合は、Exit Select ステートメントを使用してブロックを終了できます。 これは End Select の次のステートメントに制御を直ちに渡します。

Select Case コンストラクションは入れ子にできます。 入れ子になった Select Case コンストラクションのそれぞれには、一致する End Select ステートメントが必要です。また、入れ子になっている外側の Select Case コンストラクションの 1 つの Case または Case Else ステートメント ブロック内に完全に含まれている必要があります。

次の例では、Select Case コンストラクションを使用して、変数 number の値に対応する行を記述します。 2 番目の Case ステートメントには、number の現在の値と一致する値が含まれています。そのため、"Between 6 and 8, inclusive" を記述するステートメントが実行されます。

Dim number As Integer = 8
Select Case number
    Case 1 To 5
        Debug.WriteLine("Between 1 and 5, inclusive")
        ' The following is the only Case clause that evaluates to True.
    Case 6, 7, 8
        Debug.WriteLine("Between 6 and 8, inclusive")
    Case 9 To 10
        Debug.WriteLine("Equal to 9 or 10")
    Case Else
        Debug.WriteLine("Not between 1 and 10, inclusive")
End Select

関連項目