エクセルVBAのSelect Case文

<< エクセルVBAのIE制御に利用したステートメント一覧(VBAのIE制御入門) :前の記事

<< エクセルVBAのプログラムの制御構文(VBAの初心者入門) :前の記事

こちらは、エクセルVBASelect Caseステートメントの解説になります。If文でも条件分岐はできますが、条件分岐が複数存在する場合はこちらを利用することで解消されることが多いので、しっかり覚えましょう。

また、ステートメントとは「命令文」と訳されるようにコンピュータに具体的な動作を指定する最小単位のプログラムです。主にマクロの挙動を制御する構文や文法を指します。通常は1行で完結する部分を指しますが、If~Thenなど複数行にまたがる部分を意味することもあります。

目次

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

実行結果

基本形のSelect Case文の結果

解説

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

実行結果

キーワードToを利用したSelect Case文の結果

解説

まず、変数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

実行結果

キーワードIsを利用したSelect Case文の結果

解説

まず、変数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

実行結果

Case節に複数指定したSelect Case文の結果

解説

まず、変数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ステートメント >>

Excel VBAでIEを思いのままに操作できるプログラミング術 Excel 2013/2010/2007/2003対応

近田 伸矢, 植木 悠二, 上田 寛

IEのデータ収集&自動操作のプログラミング本はこの1冊だけ!IEの起動やポップアップウィンドウ、表示を制御する基本的なコードはもちろん、テキストボックスやラジオボタン、表、ハイパーリンクなどのHTML部品を制御する方法など、自動操作に欠かせないノウハウを丁寧に解説。

  • このエントリーをはてなブックマークに追加
ExcelのVBAについてのQ&A掲示板

↑ExcelのVBA全般について分からない事があればこちらの掲示板よりご質問ください^^

VBAのInternetExplorer操作入門

↑ExcelのVBAをマスターできたら、エクセルVBAのIE(InternetExplorer)操作にも挑戦してみてください^^

VBAのIE制御入門RSS

RSSフィードを登録すると最新記事を受け取ることができます。

VBAIE操作のスカイプレッスン

エクセルVBAのステートメント

こちらでは、エクセルVBAの事例で利用したステートメントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのオブジェクト

こちらでは、エクセルVBAの事例で利用したオブジェクトをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのプロパティ

こちらでは、エクセルVBAの事例で利用したオブジェクトのプロパティをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのメソッド

こちらでは、エクセルVBAの事例で利用したオブジェクトのメソッドをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。

エクセルVBAのイベント

こちらでは、エクセルVBAの事例で利用したオブジェクトのイベントをまとめたものです。ExcelのVBAには様々な機能が用意されていますので一度ご確認ください。