Excel VBAで条件分岐処理と言ったら、If文を思い浮かべるのではないでしょうか?
確かに普通に条件分岐処理をするのであれば、If文で問題ありません。
しかし、If文の場合、条件が多くなるにつれ「Else If 条件式 Then」の記載が多くなり、とても見づらくなります。
そこで登場するのが、「Select Case」です。
Select Caseを使うことでコードをすっきり書くことができるため、コードを見返した際にとても見やすくなります。
コードは書いて完成ではありません!
エラーが出たらデバッグをする必要があtたり、他の人が見たときに分かりづらくて理解できなくなってしまいます。
そのため、コードを見やすくする(可読性)ことはとても重要です^^
今回は、コードの可読性を上げるSelect Caseの基礎から、値の比較、複数条件での比較(Or)、範囲指定について解説します。
- Select Caseの使い方を知る
- 比較する値に複数の条件を指定する
- 比較する値に範囲を指定する
Excel VBA If文 複数条件の分岐処理は”Or”を使う!
Select Case の使い方
基本的な使い方
基本的な使い方は以下の通りです。
Select Case 変数
Case 条件式1
処理1
Case 条件式2
処理2
Case Else
すべての条件が不一致の場合の処理
End Select
シンプルに1つの値で比較
“Case”の後に値を指定するのが、最もシンプルな書き方です。
Case 値
比較条件に1つの値を指定するシンプルで簡単なコードを見ていきましょう。
Sub test()
Dim signal As String
signal = "Red"
Select Case signal
Case "Blue"
Debug.Print "Go!" 'メッセージボックスを表示する
Case "Yellow"
Debug.Print "Caution!"
Case "Red"
Debug.Print "Stop!"
Case Else
Debug.Print "「" & signal & "は存在しません。"
End Select
End Sub
実行結果
→Stop!
参考
Select Case ステートメントMicrosoft
Select Case と ifで全く同じ結果を出力するコードを以下に並べました。
どうですか?
好みもあるかもしれませんが、Select Caseの方が見やすくないでしょうか?
Select Case
Sub test()
Dim signal As String
signal = "Red"
Select Case signal
Case "Blue"
Debug.Print "Go!" 'メッセージボックスを表示する
Case "Yellow"
Debug.Print "Caution!"
Case "Red"
Debug.Print "Stop!"
Case Else
Debug.Print "「" & signal & "は存在しません。"
End Select
End Sub
if
Sub test()
Dim signal As String
signal = "Yellow"
If signal = "Blue" Then
Debug.Print "Go!"
ElseIf signal = "Yellow" Then
Debug.Print "Caution!"
ElseIf signal = "Red" Then
Debug.Print "Stop!"
Else
Debug.Print "「" & signal & "は存在しません。"
End If
End Sub
複数条件で比較 Or
複数条件で比較したい場合は、以下のように”Case”に続いて、条件式を”,”(カンマ)区切りで書きましょう。
基本的な使い方は以下の通りです。
Case 条件式1, 条件式2, ・・・
実際に複数条件で比較するコードを見ていきましょう。
Sub test()
Dim num As Integer
num = 3
Select Case num
Case 1, 2, 3, 4, 5
Debug.Print num & "は奇数です"
Case 6, 7, 8, 9, 10
Debug.Print num & "は偶数です"
Case Else
Debug.Print "numを1~10までの値にしてください"
End Select
End Sub
実行結果
→3は奇数です
複数条件の場合は、”,”で区切るだけなので、簡単でコードが見やすいので、if文よりおすすめです。
範囲指定で比較 to
ある値ではなく、指定範囲内であれば、Trueにしたいことがあるかと思います。
そんなときは、“to”を使うことで、範囲を指定することができます。
基本的な使い方は以下の通りです。
Case 下限値 to 上限値
実際にスコアを使ったコードを見ていきましょう。
Sub test()
Dim Score As String
Score = 90
Select Case Score
Case 0 To 60
Debug.Print "Bad"
Case 60 To 80
Debug.Print "Good"
Case Else
Debug.Print "Excellent!"
End Select
End Sub
実行結果
→Excellent!
値の大小を比較 Is
値の大小を比較したい場合は、Isを使いましょう。
基本的な使い方は以下の通りです。
Case Is < 値
実際にbmiの値を使ったコードを見ていきましょう。
Sub test()
Dim bmi As Integer
bmi = 20
Select Case bmi
Case 0 To 18.5
Debug.Print "あなたは、痩せ型です。"
Case 18.5 To 25
Debug.Print "あなたは、標準型です。"
Case Is >= 25
Debug.Print "あなたは、肥満型です。"
Case Else
Debug.Print "正の数値を入力してください。"
End Select
End Sub
実行結果
→あなたは、標準型です。
条件があいまい ワイルドカードの使い方 Like
指定したい条件があいまいなときがあるのではないでしょうか?
そんなときは、Like演算子を使うことで、部分位置で記述することができます。
基本的な使い方は以下の通りです。
Select Case True
Case 変数 Like 条件式1
処理1
Case 変数 Like 条件式2
処理2
Case Else
すべての条件が不一致の場合
End Select
パターンは以下の通りです。
パターン | 説明 |
---|---|
? | 任意の1文字 |
* | 任意の数の文字 |
# | 任意の1文字(半角の数値) |
実際にコードを見ていきましょう。
Sub test()
Dim age As Integer
age = 30
Select Case True
Case age Like "1#"
Debug.Print "10代"
Case age Like "2#"
Debug.Print "20代"
Case age Like "3#"
Debug.Print "30代"
Case Else
Debug.Print "その他"
End Select
End Sub
実行結果
→30代
注意事項
以下のようにCase Else以外のすべての条件で一致する場合、一番最初に一致したCaseの処理を実行します。
Sub test()
Dim num As Integer
num = 100
Select Case num
Case Is > 10
Debug.Print num & "は10以上です"
Case Is > 20
Debug.Print num & "は20以上です"
Case Is > 30
Debug.Print num & "は30以上です"
Case Else
Debug.Print num & "は10未満です"
End Select
End Sub
実行結果
→100は10以上です
以上の注意点を踏まえ、条件式の順番に注意して、コードを記述するようにしましょう。
Select Case と if の使い分け
「Select Case と if でどっちを使えばいいの?」と思うかもしれません。
本記事をここまで、拝見した方はなんとなくわかっているかもしれません。。。
条件分岐が少ない:if
条件分岐が多い:select case
以上のように覚えれば大丈夫です。
正直書きたいように書けばいいのですが、後々コードを見返す時に見やすい方が何かと便利です。
コードを記述する際は、見やすさにも注意しながら書くようにしましょう。
まとめ
ここまで、Select Caseの使い方についてご紹介しました。
条件分岐が多くなる場合は、ifよりSelect Caseの方が見やすいため、コードを書く際は、ifとSelect Caseのどちらがいいのか考えて書くようにしましょう。