01-VBA

制御構文|Excel VBA (Part.4)【Select Case】| 現役エンジニア&プログラミングスクール講師

目標

Select~Caseの文法を理解する

Select~Caseの条件の書き方について理解する

Select~Caseステートメントの概要と利用方法

Select~Caseステートメントとは

VBAで利用される条件分岐の制御構文です。

VBAの条件分岐にはIfステートメントとSelect~Caseステートメントの2つがあります。

Select~Caseの基本形の構文とプロシージャ

基本形の構文

まずは基本の形を確認します。構文は以下のとおりです。

構文Select Case 値を入れている変数
      Case 1つ目の値
               1つ目の条件が合致したときに動かす処理内容
       Case 2つ目の値
               2つ目の条件が合致したときに動かす処理内容
       Case 3つ目の値
               3つ目の条件が合致したときに動かす処理内容
       Case Else
               全ての条件に合致しないときに動かす処理内容
End Select

サンプルプロシージャ1

'conditionalBranchSelectという関数名に意味はなく自由な名前を付けることが出来ます。

Sub conditionalBranchSelectIf_1()

    Dim Num As Integer
    Num = InputBox("1,2,3から好きな数字を入力してください。")
    Select Case Num
        Case 1
            MsgBox "1が入力されました"
        Case 2
            MsgBox "2が入力されました"
        Case 3
            MsgBox "2が入力されました"
        Case Else
            MsgBox "1,2,3以外の数字が入力されました"
    End Select

End Sub

条件に文字を利用した形の構文とサンプルプロシージャ

条件に文字を利用した形の構文

構文は以下のとおりです。

構文Select Case 文字を入れている変数
      Case “1つ目の文字”
               1つ目の条件が合致したときに動かす処理内容
       Case “2つ目の文字”
               2つ目の条件が合致したときに動かす処理内容
       Case “3つ目の文字”
               3つ目の条件が合致したときに動かす処理内容
       Case Else
               全ての条件に合致しないときに動かす処理内容
End Select

サンプルプロシージャ2

Sub conditionalBranchSelectIf_2()

    Dim Str As String
    Str = InputBox("壱,弐,参の何れかを入力してください。")
    Select Case Str
        Case "壱"
            MsgBox "壱が入力されました"
        Case "弐"
            MsgBox "弐が入力されました"
        Case "参"
            MsgBox "参が入力されました"
        Case Else
            MsgBox "壱,弐,参以外の文字が入力されました"
    End Select

End Sub

「複数の値」を条件とした形の構文とサンプルプロシージャ

「複数の値」を条件とした形の構文

構文は以下のとおりです。複数の値を指定する場合は値と値の間を「,」で区切ります。

構文Select Case 値を入れている変数
       Case 値1, 値2, 値3, 値4, 値5
              値1, 値2, 値3, 値4, 値5の何れかに合致したときの処理
       Case 値6, 値7, 値8
              値6, 値7, 値8の何れかに合致したときの処理
       Case 値9, 値10
              値9, 値10の何れかに合致したときの処理
Case Else
              全ての条件に合致しないときに動かす処理内容
End Select

サンプルプロシージャ3

Sub conditionalBranchSelectIf_3()

    Dim age As Byte
    age = InputBox("注意1" & Chr(10) & _
                   "入力の年齢が16以上の場合のみ" & Chr(10) & _
                   "取得できる運転免許の種別が出力されます。" & Chr(10) & _
                   "注意2" & Chr(10) & _
                   "0から255までの数字以外が入力されるとエラーになります。" _
                   , "あなたの年齢を入力して下さい")
    
    Select Case age
        Case 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
            MsgBox age & "歳ですね。運転免許は取得できません。"
        Case 16, 17
            MsgBox age & "歳ですね。原付免許であれば取得できます。" 
        Case 18, 19
            MsgBox age & "歳ですね。原付免許や普通免許を取得できます。"    
        Case 20
            MsgBox age & "歳ですね。中型免許を取得できます。"
        Case 21
            MsgBox age & "歳ですね。大型免許を取得できます。"
        Case Else
            MsgBox age & "21以下の数字を入力して下さい"
    End Select
    MsgBox "終了"

End Sub

「連続の値」を条件とした形の構文とサンプルプロシージャ

連続する値を指定するには「To」を利用します。「値1 To 値2」で値1から値2までの範囲という意味になります。

「値1 To 値2」と「値3 To 値4」のいずれかに該当する場合としたいときは「値1 To 値2 , 値3 To 値4」のように「,」でつなぎます

任意の値より大きい、小さいや以上以下は比較演算子の「Is」を使用します。「Is <= 値3」であれば値3以下を指定したことになります。

「Is <= 値3」と「Is >= 値4」のいずれかに該当する場合としたいときは「Is <= 値3 , Is >= 値4」のように「,」でつなぎます

構文は以下のとおりです。

「連続の値」を条件とした形の構文

構文Select Case 値を入れている変数
        Case Is < 値1, Is > 値2
              値1以下、若しくは値2以上の場合の処理
         Case 値3 To 値4
              値3から値4の場合の処理
        Case 値5 To 値6
              値5から値6の場合の処理
        Case Is >= 値7
              値7以上の場合の処理
End Select

サンプルプロシージャ4

Sub conditionalBranchSelectIf_4()

    Dim age As Integer
        age = InputBox("注意1" & Chr(10) & _
                   "入力の年齢が16以上の場合のみ" & Chr(10) & _
                   "取得できる運転免許の種別が出力されます。" & Chr(10) & _
                   "注意2" & Chr(10) & _
                   "0から255までの数字以外が入力されるとエラーになります。" _
                   , "あなたの年齢を入力して下さい")
    
    Select Case age
        Case Is < 0, Is > 130
            MsgBox "年齢を入力してください"
        Case 0 To 15
            MsgBox age & "歳ですね。運転免許は取得できません。"
        Case 16 To 17
            MsgBox age & "歳ですね。原付免許であれば取得できます。"
        Case 18 To 19
            MsgBox age & "歳ですね。原付免許や普通免許を取得できます。"
        Case 20
            MsgBox age & "歳ですね。中型免許を取得できます。"
        Case Is >= 21
            MsgBox age & "歳ですね。大型免許を取得できます。"
    End Select
    MsgBox "終了"

End Sub

あいまいな条件を利用した形の構文とサンプルプロシージャ

あいまいな条件を利用した形の構文

条件としてあいまいな値を利用する場合は比較演算子の「Like」を使用します。値が条件の一部に当てはまる場合、その条件の処理を行わせます。

構文は以下のとおりです。

構文Select Case True
       Case 値の入る変数 Like “「文字列1」の一部*”
              文字列1と合致した場合の処理
       Case 値の入る変数 Like “「文字列2」の一部*”
              文字列2と合致した場合の処理
       Case 値の入る変数 Like “「文字列3」の一部*”
              文字列3と合致した場合の処理
       Case Else
              条件のいずれにも当てはまらなかった場合の処理
End Select

サンプルプロシージャ5

Sub conditionalBranchSelectIf_5()

    Dim Str As String
    Str = InputBox("塩,味噌,醤油の何れかを入力してください。")
    Select Case True
        Case Str Like "塩*"
            MsgBox "塩味のメニュー" & Chr(10) & _
                   "塩ラーメン" & Chr(10) & _
                   "あんかけ塩焼きそば" & Chr(10) & _
                   "塩唐揚げ"
        Case Str Like "味噌*"
            MsgBox "味噌味のメニュー" & Chr(10) & _
                   "味噌ラーメン" & Chr(10) & _
                   "野菜の胡麻味噌和え" & Chr(10) & _
                   "味噌味鶏そぼろ"
        Case Str Like "醤油*"
            MsgBox "醤油味のメニュー" & Chr(10) & _
                   "醤油ラーメン" & Chr(10) & _
                   "肉じゃが" & Chr(10) & _
                   "雑炊"
        Case Else
            MsgBox "塩,味噌,醤油以外の文字が入力されました"
    End Select

End Sub

それぞれ実行を行うと動作を確認できます。実行の方法が分からない方はこちらを参考にしてください。

初めてのExcelVBA:プロシージャの記述と実行 | 現役エンジニア&プログラミングスクール講師ExcelVBAのモジュールとプロシージャについて確認してその生成方法などを説明...

今回は以上となります。

初心者も実践で通用!「VBA・VBS」おすすめ書籍5選 | 現役エンジニア&プログラミングスクール講師「VBA・VBS」初心者の方が実践業務の中でそれらを活用しt活躍できるために必要な知識を習得できる書籍を紹介しています。ページの下部には「おすすめのITスクール情報」「おすすめ求人サイト」について情報を掲載中。...

ブックマークのすすめ

「ほわほわぶろぐ」を常に検索するのが面倒だという方はブックマークをお勧めします。ブックマークの設定は別記事にて掲載しています。

「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】| 現役エンジニア&プログラミングスクール講師「お気に入り」の登録・削除方法【Google Chrome / Microsoft Edge】について解説している記事です。削除方法も掲載しています。...
【パソコン選び】失敗しないための重要ポイント | 現役エンジニア&プログラミングスクール講師【パソコン選び】失敗しないための重要ポイントについての記事です。パソコンのタイプと購入時に検討すべき点・家電量販店で見かけるCPUの見方・購入者が必要とするメモリ容量・HDDとSSDについて・ディスプレイの種類・バッテリーの持ち時間や保証・Officeソフト・ウィルス対策ソフトについて書いています。...
RELATED POST
01-VBA

ExcelVBAのActiveCellプロパティ | 現役エンジニア&プログラミングスクール講師

2022年8月15日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ダイアログボックス|Excel VBA (Part.3)【InputBox+AutoFilter】編 | 現役エンジニア&プログラミングスクール講師

2022年12月4日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

ExcelVBAの変数 (Part.2) オブジェクト変数編 | 現役エンジニア&プログラミングスクール講師

2022年9月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

VBScriptを利用したVBAプロシージャの呼び出し(Part.1)| 現役エンジニア&プログラミングスクール講師

2023年2月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の ユーザーフォーム編(Part.1~Part.17)システム作成 | 現役エンジニア&プログラミングスクール講師

2024年1月19日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site
01-VBA

Excel VBA の「デバッグ」(Part.2)「ステップモード」「ブレークポイント」| 現役エンジニア&プログラミングスクール講師

2022年12月14日
プログラミング学習 おすすめ書籍情報発信 パソコン初心者 エンジニア希望者 新人エンジニア IT業界への就職・転職希望者 サポートサイト Programming learning Recommended schools Recommended books Information dissemination Computer beginners Prospective engineers New engineers Prospective job seekers in the IT industry Support site