本記事は、Excel C# Script入門講座の1記事です。
switch case
複数の条件により処理を分岐させたい場合はswitchステートメントを使用します。
switchステートメントには、1つ以上のswitchセクションが含まれ、各switchセクションには、1つ以上のcaseラベルと、そのあとに続く1つ以上のステートメントのリストが含まれています。具体的には以下の様に書きます。
switch(変数) { case 値1: // 変数の値 == 値1 のとき実行される処理 break; case 値2: // 変数の値 == 値2 のとき実行される処理 break; default: // 変数の値がどの値とも異なるとき実行される処理 break; }
"switch (変数)" で書かれた変数の値が "case 値:"の値と一致するかを評価し、caseの値と一致した場合にだけ、その次の文を実行します。条件がtrueでないときは、次の条件を調べます。どのcaseの条件にも当てはまらない場合は、"default:"以下の文を実行します。 複数のcaseラベルで同一の定数値を指定することはできません。
各case以下の文の最後にはbraek*1を記載します。
以下の例では、アクティブシートのA1セルに入力された文字により処理を分岐させています。
var a1 = Excel.ActiveWorkbook.ActiveSheet.Range("A1"); var v = a1.Value; switch(v) { case "りんご": a1.Value = "Apple"; break; case "もも": a1.Value = "Peach"; break; default: a1.Value = "Unknown"; break; }
case に指定できる値は、整数型(int)もしくは文字列型(string)のみです。
比較演算子による処理の分岐や、値の範囲指定による分岐はできません。これらの分岐を行いたい場合には、if ~ else if … を利用してください。
フォールスルー禁止の原則
C#では、switchステートメントは、最終セクションも含め、各 switch セクションの最終文ではswitchステートメントの外側、もしくは他のcaseラベルに移動することが必須要件とされています。つまり、他のいくつかの言語とは異なり、コードが1つのswitch セクション実行後に、連続して続くswitchセクションを実行する(フォール スルーする)ことはできません。
フォールスルー禁止の例外
以下のように、caseラベルが連続している場合に限りフォールスルーが可能です。
var a1 = Excel.ActiveWorkbook.ActiveSheet.Range("A1"); var v = a1.Value; switch(v) { case "Apple": case "apple": a1.Value = "りんご"; break; case "Peach": case "peach": a1.Value = "もも"; break; default: a1.Value = "?"; break; }
*1:もしくは、goto, return, throwなどのジャンプステートメント