制御構文とステートメントの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点以上、・・・
とかになった場合では、同じ多仕訳の条件分岐でも、
「単独(一つ)の条件」の判断ではないので不向きということが言えます。
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 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 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 条件分岐 ステートメントを使った例題
具体的にどういったコード記述になるのか、例を挙げて説明していきます。
基本(等号式)
基本の記述方法はこのようになります。
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」と変換されます。
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(または)の意味になります。
Select Case Range("A1").Value
Case "月", "水", "金"
Range("B1").Value = "午前学習日です"
Case "火", "木", "土"
Range("B1").Value = "午後学習日です"
Case Else
Range("B1").Value = "安息日です"
End Select
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よりも小さい』」という意味になります。
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 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習得を成功させたいなら、今使っている参考書が良書かどうかを判断し、新ツールとしてオンライン学習も取り入れて行うことが、
手っ取り早く短期間習得できるというのは間違いないでしょう。
今回の記事はここまでです。 最後までご覧いただき有難うございました。