【VBA】Select Case文が1から10まで一発でわかる!【条件分岐】
Excelマクロ(VBA)の条件分岐式はIf文だけではありません。
条件分岐にはSecelt Case文を使用することが可能です。
本記事ではIf文と比較したSelect Case文の使用方法やSelect Case文の長所、短所、注意事項を画像多めでわかりやすく説明します。
5分で全てを理解できる記事をサンプルプログラム多めで記載しますので最後までお付き合いください!
では確認してみましょう。
条件分岐式の関連記事
Select Case文の特徴
条件分岐として使用されるSelect Case文の特徴を確認していきます。
If文と比べると記載方法が変わります。しかし、条件式を使用するところと条件式に一致した場合にステートメント(Select文)の中から抜けることは一緒です
詳しく確認していきましょう。
Slect Case文がよく使用されるケース
よく使用されるケースを確認していきましょう
Select Case文を使用すると条件分岐がわかりやすく記載できます。
If文だけ使用して記載した場合、条件が多くなればなるほど条件がわかりにくくなりますがSelect Case文を使用するとスッキリ記載することができます。select Case文は条件分岐が大量にある場合よく使用されます。
同じ処理をIf文を使用した場合とSelectCase文を使用した場合で比べてみましょう
If文の記事で紹介した内容をサンプルプログラムとします。
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文を使用する際の構文です。
変数に対する条件によって実行される処理が変わります。
- 条件①に合致した場合処理①が実行される
- それ以外で条件②に合致した場合は処理②が実行される
- 条件①にも条件②にも合致しない場合は処理③が実行される
なお、条件②以降の条件は省略可能です。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ステートメントから処理が抜ける
図で説明したいと思います。
テストの点数によって処理を変化させるプログラムの条件式を少し変更させてみました。
例のテストの点数は90点を代入しました。ここで問題点が発生します。
二つの条件に合致する場合はプログラムの上に記載している条件から順に判定され、尚且つ上に一致した場合はそれ以降の条件は処理されません。
説明した注意点を意識しながらプログラムを作成しない場合、意図しない処理結果を返すプログラムになってしまいます。Select Case文を使用する場合は注意しながらプログラムを作成するようにしましょう。
まとめ
いかがだったでしょう。
Select Case文の使用方法を確認してきました。
同じ条件分岐式としてIf文との比較を理解した上で使い分けることが必要です。
はSelect case文を使用することでスッキリしたソースコードを作成することが可能です。
If文しか使用したことがない人は一度Select Case文を使用してみて使用方法に慣れてみてくださいね。
ではまたの記事でお会いしましょう
VBA初心者におすすめの記事
ディスカッション
コメント一覧
まだ、コメントがありません