Excel VBA Select Caseによる複数分岐処理 If文より見やすい!?

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のどちらがいいのか考えて書くようにしましょう。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です