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

式の値に応じて、いくつかのステートメントグループのうちの1つを実行します。Runs one of several groups of statements, depending on the value of an expression.


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


用語Term 定義Definition
testexpression 必須。Required. 条件.Expression. は、基本データ型 (BooleanByteCharDateDoubleDecimalIntegerLongObjectSByteShortSingle) のいずれかに評価される必要があります。String``UInteger``ULong``UShortMust evaluate to one of the elementary data types (Boolean, Byte, Char, Date, Double, Decimal, Integer, Long, Object, SByte, Short, Single, String, UInteger, ULong, and UShort).
expressionlist Case ステートメントでは必須です。Required in a Case statement. testexpressionの一致値を表す式の句の一覧。List of expression clauses representing match values for testexpression. 複数の式句は、コンマで区切ります。Multiple expression clauses are separated by commas. 各句には、次のいずれかの形式を使用できます。Each clause can take one of the following forms:

- expression1 To expression2- expression1 To expression2
-[Is] comparisonoperator - [ Is ] comparisonoperator expression
- - expression

To キーワードを使用して、testexpressionの一致値の範囲の境界を指定します。Use the To keyword to specify the boundaries of a range of match values for testexpression. expression1 の値は expression2の値以下である必要があります。The value of expression1 must be less than or equal to the value of expression2.

比較演算子 (=<><<=>、または >=) と共に Is キーワードを使用して、testexpressionの一致値に制限を指定します。Use the Is keyword with a comparison operator (=, <>, <, <=, >, or >=) to specify a restriction on the match values for testexpression. Is キーワードが指定されていない場合は、 comparisonoperatorの前に自動的に挿入されます。If the Is keyword is not supplied, it is automatically inserted before comparisonoperator.

expression のみを指定するフォームは、Is 形式の特殊なケースとして扱われます。ここで、 comparisonoperatorは等号 (=) です。The form specifying only expression is treated as a special case of the Is form where comparisonoperator is the equal sign (=). このフォームは testexpression = expressionとして評価されます。This form is evaluated as testexpression = expression.

expressionlist の式は、任意のデータ型にすることができます。 testexpression の型に暗黙的に変換可能であり、適切な comparisonoperator が使用されている2つの型に対して有効であることが条件となります。The expressions in expressionlist can be of any data type, provided they are implicitly convertible to the type of testexpression and the appropriate comparisonoperator is valid for the two types it is being used with.
statements 任意。Optional. testexpressionexpressionlist内のいずれかの句と一致する場合に実行される Case に続く1つ以上のステートメント。One or more statements following Case that run if testexpression matches any clause in expressionlist.
elsestatements 任意。Optional. testexpressionCase ステートメントの expressionlist 内のどの句とも一致しない場合に実行される Case Else に続く1つ以上のステートメント。One or more statements following Case Else that run if testexpression does not match any clause in the expressionlist of any of the Case statements.
End Select Select...Case の構築の定義を終了します。Terminates the definition of the Select...Case construction.


testexpressionCase expressionlist 句と一致する場合、その Case ステートメントに続くステートメントは、次の CaseCase Else、または End Select ステートメントまで実行されます。If testexpression matches any Case expressionlist clause, the statements following that Case statement run up to the next Case, Case Else, or End Select statement. 次に、コントロールは End Selectに続くステートメントにを渡します。Control then passes to the statement following End Select. testexpression が1つ以上の Case 句の expressionlist 句と一致する場合、最初の一致を実行した後のステートメントのみが実行されます。If testexpression matches an expressionlist clause in more than one Case clause, only the statements following the first match run.

Case Else ステートメントを使用して、他の Case ステートメントで testexpressionexpressionlist 句の間に一致が検出されなかった場合に実行する elsestatements を導入します。The Case Else statement is used to introduce the elsestatements to run if no match is found between the testexpression and an expressionlist clause in any of the other Case statements. 必須ではありませんが、予期しない testexpression 値を処理するために、Select Case の構築に Case Else ステートメントを用意することをお勧めします。Although not required, it is a good idea to have a Case Else statement in your Select Case construction to handle unforeseen testexpression values. Case expressionlist 句が testexpression に一致せず、Case Else ステートメントが存在しない場合、制御は End Selectに続くステートメントに渡されます。If no Case expressionlist clause matches testexpression and there is no Case Else statement, control passes to the statement following End Select.

Case 句では、複数の式または範囲を使用できます。You can use multiple expressions or ranges in each Case clause. たとえば、次の行は有効です。For example, the following line is valid.

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


Case および Case Else ステートメントで使用されている Is キーワードは、オブジェクト参照の比較に使用されるIs 演算子と同じではありません。The Is keyword used in the Case and Case Else statements is not the same as the Is Operator, which is used for object reference comparison.

文字列の範囲と複数の式を指定できます。You can specify ranges and multiple expressions for character strings. 次の例では、Case は、"リンゴ" と完全に等価な任意の文字列と、アルファベット順の "ナット" と "スープ" の間の値を持つか、testItemの現在の値とまったく同じ値を含んでいます。In the following example, Case matches any string that is exactly equal to "apples", has a value between "nuts" and "soup" in alphabetical order, or contains the exact same value as the current value of testItem.

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

Option Compare の設定は、文字列比較に影響を与える可能性があります。The setting of Option Compare can affect string comparisons. Option Compare Textでは、文字列 "りんご" と "りんご" は等しいとして比較されますが、Option Compare Binaryの下では、これらは等しくありません。Under Option Compare Text, the strings "Apples" and "apples" compare as equal, but under Option Compare Binary, they do not.


複数の句を持つ Case ステートメントでは、ショートサーキットと呼ばれる動作を使用できます。A Case statement with multiple clauses can exhibit behavior known as short-circuiting. Visual Basic では、句が左から右に評価されます。一方が testexpressionと一致する場合、残りの句は評価されません。Visual Basic evaluates the clauses from left to right, and if one produces a match with testexpression, the remaining clauses are not evaluated. ショートサーキットはパフォーマンスを向上させることができますが、expressionlist 内のすべての式を評価する必要がある場合は、予期しない結果が生じる可能性があります。Short-circuiting can improve performance, but it can produce unexpected results if you are expecting every expression in expressionlist to be evaluated. ショートサーキットの詳細については、「ブール式」を参照してください。For more information on short-circuiting, see Boolean Expressions.

Case または Case Else ステートメントブロック内のコードが、ブロック内のステートメントを実行する必要がない場合は、Exit Select ステートメントを使用してブロックを終了できます。If the code within a Case or Case Else statement block does not need to run any more of the statements in the block, it can exit the block by using the Exit Select statement. これにより、End Selectに続くステートメントに制御が直ちに移ります。This transfers control immediately to the statement following End Select.

Select Case の構造は入れ子にすることができます。Select Case constructions can be nested. 入れ子になった Select Case 構築にはそれぞれ、一致する End Select ステートメントが必要です。また、入れ子になっている外側の Select Case 構築の1つの Case または Case Else ステートメントブロック内に完全に含まれている必要があります。Each nested Select Case construction must have a matching End Select statement and must be completely contained within a single Case or Case Else statement block of the outer Select Case construction within which it is nested.


次の例では、Select Case 構築を使用して、変数 numberの値に対応する行を書き込みます。The following example uses a Select Case construction to write a line corresponding to the value of the variable number. 2番目の Case ステートメントには、numberの現在の値と一致する値が含まれています。そのため、"Between 6 ~ 8" を含むステートメントが実行されます。The second Case statement contains the value that matches the current value of number, so the statement that writes "Between 6 and 8, inclusive" runs.

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

関連項目See also