Select Caseを使いこなそう!VBAで読みやすい分岐を書くポイント

ようこそ♪ささぽんのExcel教室へ。
VBAで、条件によって処理を切り分けたいとき、If 文を使う方が多いのではないでしょうか。
もちろん If 文だけでも十分対応できますが、条件が多いときにはコードが読みづらくなりますよね。
そんなときに役立つのが Select Case です!
今回は、Select Caseの便利な点、If 文との違い、そして実際の使い方をわかりやすく解説します!

この記事は以下のような方におすすめです!
・条件分岐が多いマクロをよく書く方
・If文の使い方に慣れてきた方
・コードをもっとスッキリ整理したい方
このブログは「基礎からExcelマクロを学びたいと考えている方」や、
「独学での習得に壁を感じた方」に向けて、やさしく、わかりやすく、丁寧に解説しています。
読み終わるころにはきっと、
「Excelマクロって意外と簡単かも!」「もっとやってみたい!」と思えるはず。
一緒に楽しく学びながら、Excelマクロ使いを目指しましょう!
目次
1. Select Caseとは?基本と役割
VBAで条件分岐を作るとき、多くの方がまず思い浮かべるのは If 文でしょう。
もちろん If 文だけでも十分ですが、条件が多くなるとどの条件がどこで判定されているのかが一目で分かりづらくなることがあります。
そんなときに役立つのが Select Case です!
ここでは、Select Case がどんな役割を持っているのか、どんな場面で便利なのかを整理してみましょう。
■Select Caseってどんなもの?
Select Case は、変数の値によって処理を分けるときにとても便利な命令です。
例えば、テストの点数によって評価を変えたり、曜日に応じてメッセージを変えたりするときに活躍します。
もしこれを If 文だけで書こうとすると、条件が増えるごとに ElseIf を繰り返し書く必要があり、非常に読みづらいです。
一方で Select Case を使えば、分岐する条件を一覧のようにまとめて書けるので、後から見返したときも理解しやすくなるのが特徴です。
また、将来的に条件が増えた場合でも、修正しやすいのがポイントです。
特に複数の条件を順番にチェックするような処理では、Select Case を使うようにしましょう!
■If文との使い分け
If 文と Select Case は、どちらも条件分岐を作るための便利な命令ですが、おすすめの使い時が異なります。
If 文は、「複雑な条件式を使いたいとき」や「複数の変数を組み合わせて条件を作るとき」に向いています。
一方でSelect Case は、「1つの変数の値を基準に複数のパターンを分けるとき」に特に力を発揮します。
例えば、「点数」を表す変数の値に応じて評価を分けたり、「コード番号」を表す変数の値にに応じて処理を切り替えたりする場合は、Select Case を使うと整理しやすいです。
一方、「80点以上かつ出席率が90%以上」というように「点数」と「出席率」の2つの変数を組み合わせた条件で分岐をする場合には If 文の方が適しています。
迷ったときは、「条件に使う変数が1つ」なら Select Case、「条件に使う変数が複数」ならIf、と覚えておくと便利です。
使い分けについて、詳しくは4章でご説明します!
If文の書き方などをおさらいしたい方は、以下の記事も合わせてご覧ください。
2. Select Caseの基本構文と書き方
Select Case がどんなときに便利かがわかったところで、ここからは実際の書き方を見ていきましょう!
構文はとてもシンプルなので、一度型を覚えてしまえばすぐに活用できます。
■基本構文を確認しよう
Select Case の基本構文は、以下の通りです。
Select Case 変数名
Case 値1
' 値1のときの処理
Case 値2
' 値2のときの処理
Case Else
' 上のどれにも当てはまらない場合の処理
End Select
ポイントは、Select Case の後に判定したい変数を書き、その後に Case を使って条件を並べていくことです。
Case Else は、どの条件にも当てはまらなかった場合に実行される「その他」の処理に使います。
あとから条件が増えた場合には、「Case 値」を書き加えれば良いので非常にメンテナンス性に優れています!
まずは、基本構文をそのままコピーして、自分の変数名や条件に置き換えて使ってみましょう。
■Caseの書き方とポイント
Case の書き方にはいくつかのポイントがあります。
基本の形だけでなく、範囲条件や複数値の書き方を知っておくと便利です!
①基本形:値が一致する場合
単純に「変数の値が〇〇のとき」としたい場合は、「Case 値」という形で記述します。
Case 1
' 値が1のときの処理
②範囲条件を指定する場合
「〇〇以上」「〇〇以下」などの範囲条件を書くときは、「Case Is >= 値」の形で書きます。
Case Is >= 80
' 80以上のときの処理
③複数の値をまとめるとき
複数の値で同じ処理をしたいときは、カンマで区切って並べます。
Case 1, 2, 3
' 1〜3のときの処理
④その他の処理を定義したいとき
Caseに当てはまらない処理を定義したいときには、「Case Else」に続けて処理を書きます。
必ずしも書く必要はありませんが、思わぬ値が入ってもエラーを防ぐために付けておくのがおすすめです。
Case Else
' その他の処理
この4つの書き方をマスターすることで、Select Case の使い方はバッチリです!
■コーディングのコツ
Select Case を使うときは、読みやすさを意識することが大切です。
①インデントを整える
以下のように、Case ごとに処理内容を1段下げて書くと、どの条件に対応しているか一目で分かるようになります。
Select Case 点数
Case Is >= 80
MsgBox "合格!"
Case Is >= 50
MsgBox "追試です"
Case Else
MsgBox "不合格です"
End Select
②コメントを活用する
条件が多いときは、処理の内容を一言コメントで補足すると後から見返したときに便利です。
Case 1
' エラーの場合
③同じ処理のケースはまとめる
Select Caseは条件ごとの処理を一目で見やすい構文ではありますが、Caseの数が多くなるほど読みにくくなります。
同じ処理になる値が複数ある場合には、Caseを分けて書くのではなく同じCase内でカンマで区切って書くようにしましょう!
Case 1, 2, 3
' 1〜3のときの処理
ちょっとした書き方の工夫で、より見やすくなります。
ぜひ書くときに意識してみてください!
3.具体例で理解するSelect Case
Select Case の書き方を学んだら、あとは実際にどんな場面で役立つかを確認してみましょう。
ここでは、すぐに真似できるシンプルな例をいくつか紹介します!
■例1:曜日番号で曜日を判定して表示する
まずは、セルに入力された数字を基に曜日を表示する例です。
以下のコードをVBEに貼って、「A1」に「3」などの数字を入力してから実行してみてください。
Dim dayNum As Integer
dayNum = Range("A1").Value
Select Case dayNum
Case 1
MsgBox "日曜日"
Case 2
MsgBox "月曜日"
Case 3
MsgBox "火曜日"
Case 4
MsgBox "水曜日"
Case 5
MsgBox "木曜日"
Case 6
MsgBox "金曜日"
Case 7
MsgBox "土曜日"
Case Else
MsgBox "1〜7の数字をセルに入力してください"
End Select
このように、Range(“A1”).Value でセルの値を読み取り、それを Select Case で判定しています。
セルの値を使っているので、ユーザーが入力した値を元に条件を分岐できるのでとても便利です。
■例2:点数に応じて評価を分ける
次は、テストの点数に応じて「合格」「追試」「不合格」を表示する例です。
こちらも、点数をセルから取得する形式にしているので、実際のデータなどをもとにすぐ使えるようになっています。
まずは、点数を「B1」に入力してから実行してみてください!
Dim score As Integer
score = Range("B1").Value
Select Case score
Case Is >= 80
MsgBox "合格です!おめでとうございます!"
Case Is >= 50
MsgBox "追試です。あと少し頑張りましょう!"
Case Else
MsgBox "不合格です。次回に向けて復習しましょう!"
End Select
この例では、Case Is >= 80 のように「以上・以下などの範囲条件」を指定しています。
Is を忘れずに書くよう注意してください。
点数の基準を変えたいときには Case の数値を変更するだけで良いので、後からの修正がとても簡単です。
こうした範囲条件を整理して書けるのが、Select Case の大きな魅力です。
■例3:複数の値をまとめて定義する
最後に、複数の値で同じ処理をまとめて行いたいときの例を紹介します。
これも Select Case ならとても簡単です!
ここでは、「評価ランク」を表す数字として、1〜6をセル「C1」に入力してみてください。
1〜2なら「初級」、3〜4なら「中級」、5〜6なら「上級」と表示される例です。
Dim rankNum As Integer
rankNum = Range("C1").Value
Select Case rankNum
Case 1, 2
MsgBox "初級レベルです!"
Case 3, 4
MsgBox "中級レベルです!"
Case 5, 6
MsgBox "上級レベルです!"
Case Else
MsgBox "1〜6の数字を入力してください"
End Select
このように、Case の後にカンマで複数の値を並べるだけで、同じ処理をまとめられます。
複数の値をひとまとめにできるのも、Select Case の大きな強みです。
ぜひ自分のマクロで似たパターンがあれば活用してみてください!
4.If文との比較と使い分け
ここまでで Select Case の便利さを実例で見てきました。
最後に、If 文で同じ条件を書き比べてみて、違いを整理しておきましょう!
■︎If文で書いてみよう
例えば、3章で紹介した「評価ランクを判定する」例を If 文で書いてみると、以下のようになります。
Dim rankNum As Integer
rankNum = Range("C1").Value
If rankNum = 1 Or rankNum = 2 Then
MsgBox "初級レベルです!"
ElseIf rankNum = 3 Or rankNum = 4 Then
MsgBox "中級レベルです!"
ElseIf rankNum = 5 Or rankNum = 6 Then
MsgBox "上級レベルです!"
Else
MsgBox "1〜6の数字を入力してください"
End If
If 文では、複数の値を条件にする場合 Or を使って一つずつ書く必要があり、少し見づらいですよね。
条件が少ないうちは問題ありませんが、値が増えるほどコードが長くなり、後から見直したときに読み解くのに時間がかかってしまいます。
同じ処理の条件が追加されたときにも、If文であれば再び「Or」を使って文章をつなぐ必要がありますが、Select Caseであればカンマと新しい値を追加するだけで済むのです。
■どちらを選ぶ?使い分けのコツ
If 文と Select Case はどちらも条件分岐に使える構文です。
それぞれの特徴を押さえ、状況に合わせて使いこなせるようにしましょう!
使い分けの判断基準はとてもシンプルです:
- 1つの変数の値で条件分岐をするとき
→Select Case - 複数の変数の条件を組み合わせるとき
→If
例えば、点数が80点以上かつ出席率が90%以上なら合格、のように「複数の要素を条件式に含めたい」ときは If 文の方が柔軟に対応できます。
逆に、1つの変数を値のパターンで分けるだけなら Select Case を使った方が整理しやすく、後から条件を増やすのも簡単です。
慣れてくると、「ここは If にするべきか、Select Case にするべきか」が自然と見極められるようになります。
ぜひ、いろいろな条件分岐のマクロを書いて慣れていきましょう。
5.まとめ
ここまで、Select Case の基本から具体例、If 文との違いまでを一通り整理してきました。
最後にポイントをおさらいして、これからのマクロ作りに役立てていきましょう!
■Select Caseのポイントをおさらい!
Select Case は、1つの変数の値をもとに処理を分けたいときにとても便利です。
条件を並べるだけで分岐を整理できるので、後から読み直したときにも見やすく書けます。
色々なCaseの書き方を振り返ってみましょう:
書き方 | 使う場面 | 例 |
Case 値 | 値が一致する場合 | Case 1 |
Case Is >= 値 | 範囲を指定する場合 | Case Is >= 80 |
Case 値, 値 | 複数の値をまとめる場合 | Case 1, 2 |
Case Else | どの条件にも当てはまらない場合 | Case Else |
ポイントは、「条件を追加したいときに Case を増やすだけ」というシンプルさです。
複雑な条件ほど、If よりスッキリまとめられます。
「同じ変数の値で分岐するときは Select Case」
これを覚えておけば、Select Caseでの条件分岐はお手のものです!
■If文との違いと使い分けのポイント
If 文と Select Case は、どちらも条件分岐に欠かせない命令です。
もう一度違いを整理しましょう:
If文 | Select Case | |
向いている場面 | ・条件が複雑 ・変数が複数 | 1つの変数の値で分岐 |
条件の書き方 | 論理式を自由に組み合わせる | パターンを並べる |
メリット | 複雑な条件も柔軟に書ける | ・条件を追加しやすい ・整理しやすい |
もし条件式に「〇以上かつ〇未満」「AかつB」など、複数の条件が入るときは If 文が便利です。
逆に、1つの値を基準に「パターンを切り替えたい」ときは、Select Case の方がスッキリ書けます。
ここまでのポイントを参考に、まずはこの記事の例を真似して Select Case を書いてみてください。
自分のマクロに合わせて少しずつ応用していけば、条件分岐を使いこなせるようになります!
\ Excelマクロ制作も承っています /
各種クラウドソーシングサイトにて業務効率化ツールの作成・カスタマイズを承っております。
ご相談・お見積もりは無料ですので、まずはお気軽にご覧ください!