Excel VBA Select Caseの使い方とIFとの違い

ExcelVBA-基礎編

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」は複数の変数を使用した、複数条件の分岐が出来ません。

分岐IFSelect CaseSelect Caseの説明
複数条件(OR)条件1 OR 条件2条件1, 条件2「,」カンマで区切る
複数条件(AND)条件1 AND 条件2なしAND条件用の記述はない
不等号(<,>,≦,≧)条件1>=〇IS >=条件1「IS 不等号」と記述する
範囲指定条件1<=〇 AND 条件2>=〇条件1 TO 条件2TOを使用して範囲を指定する

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
タイトルとURLをコピーしました