エクセルVBAのSelect Case文
<< エクセルVBAのIE制御に利用したステートメント一覧(VBAのIE制御入門) :前の記事
<< エクセルVBAのプログラムの制御構文(VBAの初心者入門) :前の記事
こちらは、エクセルVBAのSelect Caseステートメントの解説になります。If文でも条件分岐はできますが、条件分岐が複数存在する場合はこちらを利用することで解消されることが多いので、しっかり覚えましょう。
また、ステートメントとは「命令文」と訳されるようにコンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。
目次
- Select Caseステートメントとは
- 基本形のSelect Case文サンプルコード
- キーワードToを利用したSelect Case文サンプルコード
- キーワードIsを利用したSelect Case文サンプルコード
- Case節に複数指定したSelect Case文サンプルコード
- エクセルVBAのプログラム制御構文一覧
Select Caseステートメントとは
Select Caseステートメントは、条件式の値に従って、その結果が一致するブロック以降の処理を実行するフロー制御ステートメントです。
Select Case 判断条件の対象
Case 条件1
条件1が真(True)の場合に実行される処理
Case 条件2
条件2が真(True)の場合に実行される処理
・・・
Case Else
すべての条件式が偽(False)の場合に実行される処理
End Select
構文 | Select Case testexpression [Case expressionlist-n [statements-n]] ... [Case Else [elsestatements]] End Select | |
---|---|---|
キーワード | 省略 | 説明 |
testexpression | × | こちらは必須キーワードです。任意の数式または文字列式など判断条件の対象を指定します。 |
expressionlist-n | × | こちらはCase節がある場合は、必須キーワードになります。形式は以下のいずれかを指定します。また、複数指定するときは、「,(カンマ)」で区切ります。 expression expression To expression Is comparisonoperator expression 引数expressionには数式または文字列を記述します。キーワードToは、値の範囲を指定するキーワードで値の範囲を指定する場合は、小さい方の値を先(左側)に指定します。 引数comparisonoperatorには比較演算子を指定します。キーワードIsは、値の範囲を指定するキーワードでIs演算子とLike演算子以外の比較演算子と共に利用されます。また、キーワードIsは指定しなくても自動的に設定されます。 |
statements-n | ● | こちらは省略可能です。引数testexpressionが引数expressionlist-n のいずれかと一致する場合、一致した引数statements-nの処理が実行されます。 |
elsestatements | ● | こちらは省略可能です。引数testexpressionがCase節のいずれとも一致しない場合、引数elsestatementsの処理が実行されます。 |
基本形のSelect Case文サンプルコード
Sub sample()
Dim a As Integer
a = 10
Select Case a
Case 5
MsgBox "変数aは5です。"
Case 6
MsgBox "変数aは6です。"
Case 7
MsgBox "変数aは7です。"
Case 8
MsgBox "変数aは8です。"
Case 9
MsgBox "変数aは9です。"
Case 10
MsgBox "変数aは10です。"
Case Else
MsgBox "変数aは5~10ではありません。"
End Select
End Sub
実行結果
解説
sampleのSubステートメントには引数の設定はされていません。まず、Dimステートメントを利用して変数aに整数型(Integer)を宣言し「10」を代入します。次にSelect Case文の条件対象として変数aが設定されています。そしてCase節にはそれぞれ「5~10」の値が設定されています。
今回は変数aは「10」が代入されていますので、該当するのは6つ目の「Case 10」に当てはまるため、それ以下の「MsgBox "変数aは10です。"」が実行されました。途中で条件が一致した場合は、指定された処理を実行した後にSelect Caseステートメントを抜け処理を終了します。最後はEndステートメントを利用してsampleプロシージャを終了させます。
キーワードToを利用したSelect Case文サンプルコード
Sub sample()
Dim a As Integer
a = 10
Select Case a
Case 1 To 5
MsgBox "変数aは1~5の範囲内にあります。"
Case 6 To 10
MsgBox "変数aは6~10の範囲内にあります。"
Case 11 To 15
MsgBox "変数aは11~15の範囲内にあります。"
Case Else
MsgBox "変数aは16以上の値になります。"
End Select
End Sub
実行結果
解説
まず、変数aに整数型(Integer)を宣言し「10」を代入します。次にSelect Case文の条件対象として変数aが設定されています。そしてCase節には3つのキーワードToが設定されており、1つ目は変数aの値が「1~5」、2つ目が「6~10」、3つ目が「11~15」の範囲が設定されています。
今回は変数aは「10」が代入されていますので、該当するのは2つ目の「Case 6 To 10」に当てはまるため、それ以下の「MsgBox "変数aは6~10の範囲内にあります。"」が実行されました。
キーワードIsを利用したSelect Case文サンプルコード
キーワードIsは値の範囲を指定するキーワードになります。
Sub sample()
Dim a As Integer
a = 10
Select Case a
Case Is >= 15
MsgBox "変数aは15以上の値にあります。"
Case Is >= 10
MsgBox "変数aは14~10の範囲内にあります。"
Case Is >= 5
MsgBox "変数aは9~5の範囲内にあります。"
Case Else
MsgBox "変数aは4以下の値にあります。"
End Select
End Sub
実行結果
解説
まず、変数aに整数型(Integer)を宣言し「10」を代入します。次にSelect Case文の条件対象として変数aが設定されています。そしてCase節には3つのキーワードIsが設定されており、1つ目は変数aの値が「15以上」、2つ目が「14~10」、3つ目が「9~5」の範囲が設定されています。
キーワードIsは値の範囲を指定するキーワードですので、Is演算子と同じものではないのでご注意ください。今回は変数aは「10」が代入されていますので、該当するのは2つ目の「Case Is >= 10」に当てはまるため、それ以下の「MsgBox "変数aは14~10の範囲内にあります。"」が実行されました。
このように比較演算子を利用する場合はキーワードIsを記述する必要がありますので、ご注意ください。
Case節に複数指定したSelect Case文サンプルコード
Sub sample()
Dim a As Integer
a = 10
Select Case a
Case 0, 2, 4, 6, 8, 10
MsgBox "変数aは偶数です。"
Case 1, 3, 5, 7, 9, 11
MsgBox "変数aは奇数です。"
End Select
End Sub
実行結果
解説
まず、変数aに整数型(Integer)を宣言し「10」を代入します。次にSelect Case文の条件対象として変数aが設定されています。そしてCase節には条件として複数指定されており、1つ目は変数aの値が「0,2,4,8,10」、2つ目が「1,3,5,7,9,11」の値が設定されています。
今回は変数aは「10」が代入されていますので、該当するのは1つ目の「0,2,4,8,10」に当てはまるため、それ以下の「MsgBox "変数aは偶数です。"」が実行されました。
このように1つのCase節に複数条件を指定する場合は、「,(カンマ)」で区切ることにより設定できますので、覚えておきましょう。
エクセルVBAのプログラム制御構文一覧
次の記事: エクセルVBAのFor~Nextステートメント >>
近田 伸矢, 植木 悠二, 上田 寛
IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。