VBAで分岐する方法として代表的なのが「If」と、この「Select Case」とありますが、この「Select Case」を使った分岐方法についてご説明します。
基本的な使い方から、比較演算の方法などもご説明したいと思います。
「If」で分岐する方法については「IF文の使い方と分岐方法」をご覧ください。
プログラムは分岐とループで成り立っているといっても過言ではないと思いますので、「ループの使い方」についての記事もぜひご覧ください。
1.Select Caseの使い方
Select Caseは次のように記述します。
SelectとCaseの間にスペースが入りますので、ご注意ください。
Select Case 変数
Case 条件式1
'処理1
Case 条件式2
'処理2
Case Else
'処理3
End Select
変数と条件式が一致した場合、Caseと合致した以下コードが実行されます。
「Case Else」を指定している場合は、どの条件式にも一致しなければ、「Case Else」以下のコードが実行されます。
もし「Case Else」を指定していない場合に、すべての条件に一致しない場合はどの分岐も実行されずに、「End Select」の次のコードが実行されます。
また、Likeと組み合わせる事で「*」や「?」などのワイルドカードを使用する事もできます。
ここらへんは基本的に「IF文」と同じです。
また、Caseに指定する条件式には「OR」や不等号などの比較、範囲指定も可能ですが記述方法が「IF文」とは少し違いますので注意が必要です。
IFとSelect Caseの使い分けや、違いについて説明ます。
2.IFとSelect Caseの違い
IFとSelect Caseは分岐をする際に使用しますが、似ているところと全く違うところがあります。
IFとSelect Caseの使い分け方
IFとSelect Caseを使い分ける場合の基準についてですが、絶対にこの場合は「IF」、この場合は「Select Case」といったことはありません。
ですが、複数の変数を使用した条件で分岐することができないため、複数の変数で分岐する場合は「IF」を使用しましょう。
「IF」と「Select Case」ですが、変数が複数かどうか以外に使い分けるとしたら「分岐する条件が多い」場合は「Select Case」を優先して使うことをおすすめします。
理由は「可読性が上がる」からです。
「Select Case」は「IF」よりも条件式を簡単に記述できることが多いので、条件式が見やすく読みやすいコードになります。
次のコードはどちらも同じ結果を返しますが、IFのほうが条件式が「見づらい」感じがします。
IF
Sub Sample1()
Dim i As Long
i = 5
If i = 1 Then
MsgBox i & "はです。"
ElseIf i >= 2 And i < 6 Then
MsgBox i & "は2以上~6未満です。"
ElseIf i >= 6 And i < 10 Then
MsgBox i & "は6以上、10未満です。"
ElseIf i >= 10 And i < 15 Then
MsgBox i & "は10以上~15未満です。"
End If
End Sub
Select Case
Sub Sample2()
Dim i As Long
i = 5
Select Case i
Case 1
MsgBox i & "はです。"
Case Is >= 2, Is < 6
MsgBox i & "は2以上~6未満です。"
Case Is >= 6, Is < 10
MsgBox i & "は6以上、10未満です。"
Case Is >= 10, Is < 15
MsgBox i & "は10以上~15未満です。"
End Select
End Sub
IFとSelect Caseの違い
基本的な使用方法は同じですが、条件式の記述方法に大きな違いがありますので一覧にしてみました。
IFと違いANDがありませんが、TOを使用する事でANDを補完できます。
「Select Case」は複数の変数を使用した、複数条件の分岐が出来ません。
分岐 | IF | Select Case | Select Caseの説明 |
複数条件(OR) | 条件1 OR 条件2 | 条件1, 条件2 | 「,」カンマで区切る |
複数条件(AND) | 条件1 AND 条件2 | なし | AND条件用の記述はない |
不等号(<,>,≦,≧) | 条件1>=〇 | IS >=条件1 | 「IS 不等号」と記述する |
範囲指定 | 条件1<=〇 AND 条件2>=〇 | 条件1 TO 条件2 | TOを使用して範囲を指定する |
3.Select Caseのサンプルコード
それではそれぞれのサンプルコードを紹介したいと思います。
基本的なサンプルコード
簡単なコードですが、変数の値によって条件に一致したコードが実行されます。
Sub Sample3()
Dim i As Long
i = 10 * 10
Select Case i
Case 100
MsgBox "100です。"
Case 1000
MsgBox "1000です。"
Case 10000
MsgBox "10000です。"
Case Else
MsgBox "それ以外です。"
End Select
End Sub
ORのサンプルコード
「OR」はIF文と違い、「,」で区切るだけになり非常に簡単に指定できます。
Sub Sample4()
Dim MyStr As String
MyStr = "う"
Select Case MyStr
Case "あ", "い", "う", "え", "お"
MsgBox "あ行です。"
Case "か", "き", "く", "け", "こ"
MsgBox "か行です。"
Case "さ", "し", "す", "せ", "そ"
MsgBox "さ行です。"
Case Else
MsgBox "それ以外です。"
End Select
End Sub
不等号のサンプルコード
不等号もIFと大きく違い、「Is」を使用します。
Sub Sample5()
Dim i As Long
i = 10 * 10
Select Case i
Case Is < 100
MsgBox "100未満です。"
Case Is >= 100
MsgBox "100以上です。"
End Select
End Sub
範囲指定のサンプルコード
範囲指定は「下限値 TO 上限値」で記述できますし、Sample2で紹介した不等号と「OR」の併用でも範囲を指定する事が可能です。
TOを使用した範囲指定
Sub Sample6()
Dim i As Long
i = 10
Select Case i
Case 1 To 10
MsgBox "1-10です。"
Case 11 To 20
MsgBox "11-20以上です。"
Case 21 To 30
MsgBox "21-30以上です。"
End Select
End Sub
ORと不等号を使用した範囲指定
上記で紹介したコードで、ORと不等号を使用した範囲指定方法です。
Sub Sample7()
Dim i As Long
i = 5
Select Case i
Case 1
MsgBox i & "はです。"
Case Is >= 2, Is < 6
MsgBox i & "は2以上~6未満です。"
Case Is >= 6, Is < 10
MsgBox i & "は6以上、10未満です。"
Case Is >= 10, Is < 15
MsgBox i & "は10以上~15未満です。"
End Select
End Sub
日時の範囲指定
数値以外にも日付なども指定できます。
Sub Sample8()
Dim MyDate As Date
MyDate = "2019/2/10"
Select Case MyDate
Case "2019/1/1" To "2019/1/31"
MsgBox "1月です。"
Case "2019/2/1" To "2019/2/28"
MsgBox "2月です。"
Case "2019/3/1" To "2019/3/31"
MsgBox "3月です。"
End Select
End Sub
Likeとワイルドカードを使用したサンプルコード
ワイルドカードで部分一致した条件を指定する事が可能です。
ワイルドカードを使用する場合は「Like」を使用します。
他の比較と違い少し記述方法が違います。
Select Case True
Case 変数 Like "*指定文字*"
「Select Case True」と記述して、分岐条件に「変数 Like “*文字*”」と指定します。
Sub Sample9()
Dim MyStr As String
MyStr = "東"
Select Case True
Case MyStr Like "東*"
MsgBox "東京です。"
Case MyStr Like "北*"
MsgBox "北海道です。"
Case MyStr Like "大*"
MsgBox "大阪です。"
Case Else
MsgBox "それ以外です。"
End Select
End Sub