Select Case 条件分岐の使い方。ステートメントの基本はコレ。

vbaselectcaseeyecatch

制御構文とステートメントのSelect Case 条件分岐 ステートメント、使い方を説明します。

エクセルVBAで、必須の条件文法です。
簡単なコード、可読性の向上が特徴のステートメントです。是非、知っておきましょう。

こんにちは、じゅんぱ店長(@junpa33)です。

今回のテーマは、もう一つの条件分岐ステートメント「Select Case」についてです。

同様機能のステートメントでは、よくご存じの「If・・Then・・Else」があります。

Select Case 条件分岐 ステートメントは、どういった時に使うかというとですが、

厳格に使い分けの区別はありません。

「この場合は、こちらの方が便利か・可読性がいいか」という様な考え方での使い分けになります。

Select Case 条件分岐 とIfの具体的な使い分け基準

一番メジャーな条件文で「If条件文」がありますが、どう違うのでしょうか。

ズバリ結論的には、

特に

Select Caseは「単独(一つ)の条件対象」を繰り返し判断するときに強みを発揮する!

ということです。

<解説例題>

  • 英語の点数が、100点の人、90点以上の人、80点以上の人、70点以上の人、50点以上から69点以下の人、40点以上から49点以下の人、40点未満の人

というような、「単独条件」の場合での多仕訳の条件分岐の時に有効です。

でもこれが、

  • 英語の点数が100点で国語の点数が90点以上、英語の点数が90点以上で国語の点数が80点以上、英語の点数が80点で国語の点数が70点以上、・・・

とかになった場合では、同じ多仕訳の条件分岐でも、

「単独(一つ)の条件」の判断ではないので不向きということが言えます。

MEMO

If条件文についてはこの記事を参考にしてください。

vbaifjyokeneyecatch「If条件文」のVBAコードの組み方。条件の絞り方を最速に理解。

Select Case 条件分岐 とIfの記述方法の基本的違い

「If条件文」とはどのような記述方法の違いがあるのでしょうか。

Select Case 条件分岐の基本の構文

「Select Case・・・End Select」 の「・・・」の部分に処理コードを記述するブロック形式のステートメントになります。

If条件文のような1行形式(インライン形式)の構文は存在しません。

Select Caseの構文

Select Case 条件判断される変数や値
  Case 条件1
    条件1を満たした時の処理コード
  Case 条件2
    条件2を満たした時の処理コード
  Case Else
    いずれの条件も満たさなかった時の処理コード
End Select

Select Case 条件分岐 とIfの記述方法の違い

同じ実行結果を導くコードを「If」と「Select Case」で作成してみました。

コード比較「If」

  If Range("A1").Value < 5 Then 
    Range("B1").Value = "5未満だよ" 
  ElseIf Range("A1").Value = 5 Then
    Range("B1").Value = "ジャスト5です" 
  ElseIf Range("A1").Value > 5 Then
      Range("B1").Value = "5よりデカいです"
  Else
  End If

コード比較「Select Case」

  Select Case Range("A1").Value
      Case Is < 5 
      Range("B1").Value = "5未満だよ" 
    Case 5 
      Range("B1").Value = "ジャスト5です" 
    Case Is > 5
          Range("B1").Value = "5よりデカいです"
      Case Else
  End Select

このように「Select Case」の構文は、条件分岐の記述方法がかなり簡潔になっています。

Select Case 条件分岐 ステートメントを使った例題

具体的にどういったコード記述になるのか、例を挙げて説明していきます。

基本(等号式)

基本の記述方法はこのようになります。

基本コード1

  Select Case Range("A1").Value
    Case 5 
      Range("B1").Value = "ジャスト5です" 
    Case 7
          Range("B1").Value = "ジャスト7です"
      Case Else
  End Select

Caseのところで「=5」や「=7」と打ち込むと自動的に「Is = 5」,「Is = 7」と変換されます。

基本コード2

    Select Case Range("A1").Value
        Case Is = 5
            Range("B1").Value = "ジャスト5です"
        Case Is = 7
            Range("B1").Value = "ジャスト7です"
        Case Else
    End Select

Or(または)の条件を使う

複数の条件を「,」(カンマ)で区切ると、Or(または)の意味になります。

Or(または)のコード

    Select Case Range("A1").Value
        Case "月", "水", "金"
            Range("B1").Value = "午前学習日です"
        Case "火", "木", "土"
            Range("B1").Value = "午後学習日です"
        Case Else
            Range("B1").Value = "安息日です"
    End Select

To(範囲指定)の条件を使う

「To」キーワードを使えばどこからどこまでという範囲の指定で条件分岐させることが出来ます。

To(範囲指定)コード

    Select Case Range("A1").Value
        Case 0 To 5
            Range("B1").Value = "5才まで"
        Case 6 To 8
            Range("B1").Value = "6才から8才"
        Case 9 To 10
            Range("B1").Value = "9才から10才"
        Case Else
    End Select

不等号の条件を使う

「不等号」使っての範囲指定で条件分岐させることが出来ます。

ちなみに<解説例題>で示したお題をSelect CaseでVBAコード化するとこのようになります。

解説例題

解説例題コード

    Select Case Range("A1").Value
        Case Is <= 39
            Range("B1").Value = "39点以下"
        Case Is <= 49
            Range("B1").Value = "40点から49点以下"
        Case Is <= 69
            Range("B1").Value = "50点から69点以下"
        Case Is <= 79
            Range("B1").Value = "70点から79点以下"
        Case Is <= 89
            Range("B1").Value = "80点から89点以下"
        Case Is <= 99
            Range("B1").Value = "90点から99点以下"
        Case 100
            Range("B1").Value = "100点満点です"
    End Select

注意しましょう!

「5より大きく10より小さい」という意味で、下のように記述しようとしても、

コードの実行内容は、「『5よりも大きい』か または『10よりも小さい』」という意味になります。

不等号のコード2

Case Is > 5, Is < 10

比較演算子で、「Case・・・」文の中では、一文で「〇〇より大きく✖✖より小さい」という表現は出来ないと、覚えておきましょう。

ワイルドカードの条件を使う

Like演算子を使って条件分岐を行うことが出来ます。

コード

    Select Case True
        Case Range("A1").Value Like "大*"
            Range("B1").Value = "大阪府ですね"
        Case Range("A1").Value Like "京*"
            Range("B1").Value = "京都府ですね"
        Case Range("A1").Value Like "兵*"
            Range("B1").Value = "兵庫県ですね"
        Case Range("A1").Value Like "奈*"
            Range("B1").Value = "奈良県ですね"
        Case Range("A1").Value Like "滋*"
            Range("B1").Value = "滋賀県ですね"
        Case Range("A1").Value Like "和*"
            Range("B1").Value = "和歌山県ですね"
        Case Else
            Range("B1").Value = "近畿圏外ですね"
    End Select

Select Case 条件分岐 ステートメントの
入れ子(ネスト)について

先の「不等号の条件を使う」の項目の中で、

一文での記述方法では「〇〇より大きく✖✖より小さい」というような閉ざされた範囲での条件指定は不可能 とお話ししました。

今度はネスト構造で、この条件指定の記述を行ってみます。

得点別に段階評価するという例題を考えます。

  • 得点90点以上はS判定
  • 得点80点以上90点未満はA判定
  • 得点70点以上80点未満はB判定
  • 得点60点以上70点未満はC判定
  • 得点40点以上60点未満はD判定
  • 得点40点未満はE判定

の評価を行うものとします。

ちなみに単層構造でこの例題をコード記述するとこのようになります。

例題単層コード

    Select Case Range("A1").Value
        Case Is < 40
            Range("B1").Value = "E判定"
        Case Is < 60
            Range("B1").Value = "D判定"
        Case Is < 70
            Range("B1").Value = "C判定"
        Case Is < 80
            Range("B1").Value = "B判定"
        Case Is < 90
            Range("B1").Value = "A判定"
        Case Is <= 100
            Range("B1").Value = "S判定"
    End Select

閉鎖された範囲指定の方法

「If条件文」で記述すると、

「If Range(“A!”).Value >= 40 And Range(“A!”).Value < 60 Then」

となるIfの一文を

Select Caseでは、

Case Is < 40
  Range(“B1”).Value = “E判定”
Case Is < 60
  Range(“B1”).Value = “D判定”

という風に表現するということになります。

Select Case の入れ子(ネスト)

この例題を文字通りに、Select Caseステートメントの入れ子(ネスト)構造で(ムリムリ)記述します。

それぞれのカラーマーカーの行範囲が、それぞれのSelect Caseの条件分岐範囲となります。

Select Case 条件分岐ネストコード

    Select Case Range("A1").Value
    
        Case Is < 40 
            Range("B1").Value = "E判定" 
        Case Is >= 40
        
            Select Case Range("A1").Value
                Case Is < 60 
                    Range("B1").Value = "D判定" 
                Case Is >= 60
                
                    Select Case Range("A1").Value
                        Case Is < 70 
                            Range("B1").Value = "C判定" 
                        Case Is >= 70
                        
                            Select Case Range("A1").Value
                                Case Is < 80 
                                    Range("B1").Value = "B判定" 
                                Case Is >= 80
                                
                                    Select Case Range("A1").Value
                                        Case Is < 90
                                            Range("B1").Value = "A判定"
                                        Case Else
                                            Range("B1").Value = "S判定"
                                    End Select
                                    
                            End Select
                            
                     End Select
            
            End Select
            
    End Select

5層構造のネストになりました。

Select Caseステートメントは単独条件しか記述できませんので、

ネストにする場合、行数の多い構造になってしまいます。

If文やWith文ほどネストには向いていないことが分かります。

Select Case 条件分岐 ステートメントの使い方のまとめ

基本、Select Caseステートメントを使う場面は、条件分岐を多項目必要とする「単独の条件対象」であるということです。

コードを簡潔に記述できるので、可読性が高いということです。

条件分岐で「範囲指定」の記述については、簡潔がゆえの条件指定ミスを犯さないように注意しましょう。

「かつ(AND)」を直接記述できないことに注意です。

短期間でエクセルVBAの独学習得を目指したいなら

エクセルVBAを独学する独習方法は、学習者それぞれ十人十色、多種多様と思われます。

けれども、

出来るだけ効率よく学習するためには、いくつかの大切なポイントがあります。

独学でもVBA習得の中級クラスに達するのはそんなに難しいことではありません。

先人が行った勉強方法をあなたがそのまま利用すればよいということです。

独習のための大切な7つのポイントは、上記記事にて解説しています。

重要ワード

独習によるVBA習得のキーワードは、

出来るだけ多くの実例に触れること!

です。

正直、VBAの学習について自分の周りの仕事(業務)からだけ実例を得るのでは効率良い習熟は無理です。

ハッキリ言って、

本当に短い期間でVBA習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、

手っ取り早く短期間習得できるというのは間違いないでしょう。

エクセルVBA最速理解で必要な知識を集めよう!

今回の記事はここまでです。   最後までご覧いただき有難うございました。

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。