【VBA】Select Case文が1から10まで一発でわかる!【条件分岐】

2020年5月10日

IF文を使わない条件分岐方法がスッキリ理解できます!

Excelマクロ(VBA)の条件分岐式はIf文だけではありません。
条件分岐にはSecelt Case文を使用することが可能です。

本記事ではIf文と比較したSelect Case文の使用方法やSelect Case文の長所、短所、注意事項を画像多めでわかりやすく説明します。
5分で全てを理解できる記事をサンプルプログラム多めで記載しますので最後までお付き合いください!

では確認してみましょう。

この記事を読むと
  • Select Case文の特徴を理解できる
  • Select Case文の使用方法を理解できる
  • 条件分岐のコードをスッキリ記載できる

条件分岐式の関連記事

Select Case文の特徴

Select Case文の特徴

条件分岐として使用されるSelect Case文の特徴を確認していきます。
If文と比べると記載方法が変わります。しかし、条件式を使用するところと条件式に一致した場合にステートメント(Select文)の中から抜けることは一緒です

詳しく確認していきましょう。

Slect Case文がよく使用されるケース

よく使用されるケースを確認していきましょう

条件分岐の数が大量にある場合に使用されます

Select Case文を使用すると条件分岐がわかりやすく記載できます。

If文だけ使用して記載した場合、条件が多くなればなるほど条件がわかりにくくなりますがSelect Case文を使用するとスッキリ記載することができます。select Case文は条件分岐が大量にある場合よく使用されます

同じ処理をIf文を使用した場合SelectCase文を使用した場合で比べてみましょう
If文の記事で紹介した内容をサンプルプログラムとします。

Slect Case文がよく使用されるケース

if文を使用した場合

If文の説明通りのプログラムです。
6行目から14行目までがIf文です。If文が使用されていることを確認してみてください。

 Sub ifElseIfElseSample()
 
    Dim point
    point = InputBox(" 点数を入力してください")
     'Point が80 点以上のとき合格と表示
    If point >= 80 Then
         MsgBox "合格です!"
    '  Point が 49 点以下の場合は不合格と表示
    ElseIf point <= 49 Then
        MsgBox "  不合格です"
     ' それ以外は再試験を行なってくださいと表示
    Else
        MsgBox " 再試験を行なってください"
    End If
    
 End Sub

Select Case文を使用した場合

同じプログラムをSelect Case文を使用して記載したものです。
詳しい使用方法は後述しますが5行目から15行目にSelect Case文を使用していることを確認してみてください。

  Sub selectCseSample()
  
    Dim point
    point = InputBox(" 点数を入力してください")
    Select Case point
        'Point が80 点以上のとき合格と表示
        Case Is >= 80
            MsgBox "合格です!"
        'Point が 49 点以下の場合は不合格と表示
        Case Is <= 49
            MsgBox "  不合格です"
         'それ以外は再試験を行なってくださいと表示
        Case Else
            MsgBox " 再試験を行なってください"
    End Select
  
  End Sub

点数によって処理が変わるプログラムですが、If文と比べて点数の条件式が記載されている列がほぼ同じ場所にあることがわかります。

ここではちょっと見やすいかなー?ぐらいに考えてもらえれば良いかなと思います。

Select Case文の長所

Select Case文の長所を考えてみましょう
If文と比べた場合の長所です

  • 条件が大量にある場合ソースコードが見やすい
  • 条件分1行の文字量が少なくなる

サンプルプログラムで確認した通り、条件式が同じ列にあるためソースコードが見やすくなります。

また、条件分の文字量が少なくなります。
これは都度「Then」を入力する必要がなくなるからです。

Select Case文の短所

Select Case文の短所を考えてみましょう
If文と比べた場合の短所です。

  • 条件のパターンが少ししかない場合はソースコードが長くなってしまう
  • 条件式の入力に制限がある

条件のパターンが少ない場合はソースコードが長くなってしまうためIf文を使用することをおすすめします。

同じ変数に対する条件しか入力できません。また、OrやAndを指示することができません。
厳密には指示はできますが予想通りの結果を受け取ることができないようです。
よってOrやAndは使用しないようにしましょう

条件式の入力に幅を広げたい場合はIf文をするべきでしょう。

Select Case文の使用方法

Select Case文の使用方法

Select Case文の使用方法を確認していきます。
基本的な使用構文と条件式の入力方法を確認します。

合わせてSelect Case文のテストプログラムを確認することで理解を深めていきましょう

Select Case文の使用構文

Select Case文を使用する際の構文です。

Select Case文使用方法
Select Case “変数"
    Case条件①
        処理①
    Case条件②
        処理②
    Case Else
        処理③
End Select
Select」「Case」「End Select」は定型なのでSelect等が出てきたら本構文であることを理解してください。

変数に対する条件によって実行される処理が変わります。

  1. 条件①に合致した場合処理①が実行される
  2. それ以外で条件②に合致した場合は処理②が実行される
  3. 条件①にも条件②にも合致しない場合は処理③が実行される

なお、条件②以降の条件は省略可能です。Elseも省略したい場合は省略することが可能です。

Select Case文で使用できる条件式

SelectCase文で使用できる条件式について確認してみましょう。

条件式 意味
Case a aに一致
Case a To b aとbの間(aとbの値を含む)
Case is > a aより大きい場合
Case is < a aより小さい場合
Case is >= a a以上の場合
Case is <= a a以下の場合
Case is <> a a以外の場合
Case Else Caseで指定した条件以外

Case文ならではの使用方法があるのでSelect Case文を学習する際に一緒に覚えるようにしましょう!

Select Case文のテストプログラム

Select Case文のテストプログラムです。
If文で出した例に少し条件式を増やして記載してみました

条件式が増えればプログラムの解読性が上がることがわかります
  Sub selectCseSample()
  
    Dim point
    point = InputBox(" 点数を入力してください")
    Select Case point
        Case 100
            MsgBox " 満点です!"
        Case 90 To 99
             MsgBox " 優秀です"
        Case 80 To 89
             MsgBox " 合格です"
        Case 50 To 79
             MsgBox "  もっと頑張りましょう"
        Case 20 To 49
              MsgBox "  再試験を行なってください"
        Case 0 To 19
              MsgBox "不合格です"
        Case Else
            MsgBox " 範囲外です"
    End Select
  
  End Sub

テストプログラムの内容です。
点数と結果は適当に決めていますが、テストプログラムのように条件式が多い場合はSelect Case文を使用する方がわかりやすくソースコードを書くことができます

点数 出力結果
100点 満点です
90点から99点 優秀です
80点から89点 合格です
50点から79点 もっと頑張りましょう
20点から49点 再試験を行なってください
0点から19点 不合格です
それ以外 範囲外です

Select Case文を使用する場合の注意点

Select Case文を使用した場合には注意点があります。

条件式が上から判定されていく
上の条件式に合致した場合はSelectステートメントから処理が抜ける

図で説明したいと思います。

Select Case文を使用する場合の注意点

テストの点数によって処理を変化させるプログラムの条件式を少し変更させてみました。

例のテストの点数は90点を代入しました。ここで問題点が発生します。

条件②と条件③の両方に条件が一致します。

二つの条件に合致する場合はプログラムの上に記載している条件から順に判定され、尚且つ上に一致した場合はそれ以降の条件は処理されません

今回の結果では処理②だけが実行されることになります。

説明した注意点を意識しながらプログラムを作成しない場合、意図しない処理結果を返すプログラムになってしまいます。Select Case文を使用する場合は注意しながらプログラムを作成するようにしましょう。

まとめ

まとめ

いかがだったでしょう。
Select Case文の使用方法を確認してきました。

同じ条件分岐式としてIf文との比較を理解した上で使い分けることが必要です

同じ変数に対する条件式が大量にある場合

はSelect case文を使用することでスッキリしたソースコードを作成することが可能です。

If文しか使用したことがない人は一度Select Case文を使用してみて使用方法に慣れてみてくださいね。

ではまたの記事でお会いしましょう

VBA初心者におすすめの記事