- 他の人が作ったマクロを見たら、Select Caseっていうのがあったんだけど、これって何?
- Select Caseの使い方や書き方が知りたい
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- Select Caseの概要がわかる
- Select Caseの使い方や書き方を学べる
- Select CaseとIf文の違いを知れる
VBAマクロ歴3年の私が、できるだけわかりやすく解説いたします。
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
VBAの「Select Case」とは?
「Select Case」は条件分岐をさせたいときに使います。
わかりやすく例えると、以下のような感じです。
- 今日が水曜日なら、燃えないゴミを出す
- 今日が木曜日なら、粗大ゴミを出す
- 今日が火曜日もしくは金曜日なら、燃えるゴミを出す
- 今日がそれ以外の曜日ならゴミを出さない
なんだか「If文」みたい…と思った方、すばらしいです!
「If文」と「Select Case」の違いについては、後ほど詳しく解説いたします。
では、上記の例を実際に「Select Case」を使って書いてみましょう。
「Select Case」の使い方や書き方
前項のゴミの日を「Select Case」を使ってコードにしたものが下記です。
Sub ゴミの日()
Dim week As Integer
week = 1 '1が月曜日、7が日曜日
Select Case week
Case Is = 3
MsgBox "今日は燃えないゴミの日です"
Case Is = 4
MsgBox "今日は粗大ゴミの日です"
Case Is = 2, = 5
MsgBox "今日は燃えるゴミの日です"
Case Else
MsgBox "今日はゴミの日ではありません"
End Select
End Sub
1つ1つ解説していきます。
プロシージャの作成
Sub ゴミの日()
End Sub
プロシージャなど、マクロの基礎は下記記事でわかりやすく解説しております。
コードだけではなく、開発タブの表示からマクロの保存まで知りたい方はご参考ください。
変数の宣言・代入
Dim week As Integer
week = 1 '1が月曜日、7が日曜日
上記コードにて、以降に使用する変数を宣言し、値を代入しております。
今回は変数「week」をint型で宣言し、曜日に対応する数値を代入しました。
変数や宣言については、下記記事をご参考ください。
条件分岐
Select Case week
Case Is = 3
MsgBox "今日は燃えないゴミの日です"
Case Is = 4
MsgBox "今日は粗大ゴミの日です"
Case Is = 2, = 5
MsgBox "今日は燃えるゴミの日です"
Case Else
MsgBox "今日はゴミの日ではありません"
End Select
上記コードにて、条件分岐を設定しております。
まずは「Select Case」のステートメントを作成しましょう。
ステートメントとは「まとまり」を意味し、「Select Case」の始まりから終わりまでのことです。
マクロを作り始める時と同じ感覚で大丈夫です。
Select Case week
End Select
「Select Case」を書いたら、条件分岐で判定する変数(今回はweek)を書きます。
忘れないうちに、プロシージャの終わりである「End Select」も書いておきましょう。
では、7行目に条件分岐の式を書いていきます。
Case Is = 3
MsgBox "今日は燃えないゴミの日です"
Case Is = 4
MsgBox "今日は粗大ゴミの日です"
Case Is = 2, = 5
MsgBox "今日は燃えるゴミの日です"
Case Else
MsgBox "今日はゴミの日ではありません"
「Case Is = 3」は、【判定する変数「week」が3と等しいとき】という意味です。
(「Is =」は省略できますが、最初のうちは書いておいた方がわかりやすいです)
マクロの流れは以下のとおりです。
weekが3(水曜日)と等しいとき「燃えないゴミの日」と表示
weekが4(木曜日)と等しいとき「粗大ゴミの日」と表示
weekが2(火曜日)もしくは5(金曜日)と等しいとき「燃えるゴミの日」と表示
上記のどれにも当てはまらないとき「ゴミの日ではありません」と表示

同じ条件式を書いた場合、最初に判定した結果が採用されますので注意が必要です。
Case Is = 3
MsgBox "今日は燃えないゴミの日です"
Case Is = 3
MsgBox "今日は粗大ゴミの日です"

メッセージボックスを表示させる方法は、下記記事で詳しく解説しております。ご参考ください。
いろいろな条件分岐
文字列が入った変数でも判定が可能です。
Sub ゴミ出し()
Dim week As String
week = "水曜日"
Select Case week
Case Is = "水曜日"
MsgBox "今日は燃えないゴミの日です"
Case Is = "木曜日"
MsgBox "今日は粗大ゴミの日です"
Case Is = "火曜日", Is = "金曜日"
MsgBox "今日は燃えるゴミの日です"
Case Else
MsgBox "今日はゴミの日ではありません"
End Select
End Sub
文字列が入った変数を使う場合は、下記の2点に注意してください。
- 宣言する場合は、「String型(文字列型)」で行う
- 代入や判定する文字列を「”(ダブルクォーテーション)」で囲う
下記のような条件分岐も可能です。
Sub 会員ランク()
Dim sales As Integer
point = 50000
Select Case point
Case 100000 To 999999
MsgBox "ランク: ゴールド"
Case 50000 To 99999
MsgBox "ランク: シルバー"
Case 0 To 49999
MsgBox "ランク: ブロンズ"
Case Else
MsgBox "ランク: ノーマル"
End Select
End Sub
pointに応じてランクを表示させます。
Sub 部分一致判定()
Dim name As String
name = "田中太郎"
Select Case name
Case "田中*", "佐藤*", "鈴木*"
MsgBox "知っている名字です"
Case Else
MsgBox "知らない名字です"
End Select
End Sub
「*(アスタリスク)」を使用することで、部分一致の判定が可能です。
「Select Case」とIf文の違い
If文とSelect Caseはどちらも条件分岐のための構文です。
では、ゴミの日の条件分岐をIf文でも書いてみましょう。
If文については、下記記事をご参考ください。
If week = 3 Then
MsgBox "今日は燃えないゴミの日です"
ElseIf week = 4 Then
MsgBox "今日は粗大ゴミの日です"
ElseIf week = 2 or week = 5 Then
MsgBox "今日は燃えるゴミの日です"
Else
MsgBox "今日はゴミの日ではありません"
End If
「Select Case」と比較してみましょう。
Select Case week
Case Is = 3
MsgBox "今日は燃えないゴミの日です"
Case Is = 4
MsgBox "今日は粗大ゴミの日です"
Case Is = 2, = 5
MsgBox "今日は燃えるゴミの日です"
Case Else
MsgBox "今日はゴミの日ではありません"
End Select
今回の場合は「Select Case」の方がスッキリしていてわかりやすいかと思います。
「If文」と「Select Case」には、それぞれに適した場面があります。
If文の特徴
- 異なる条件を比較する場合に適している(i <5 or i>10)
- 複数の変数を組み合わせた条件も書ける(i = 0 and week = 1など)
- 条件が増えると ネスト(Ifの中にIfを書く)が深くなり、可読性が悪化 する
「Select Case」の特徴
- 1つの変数の値を基準に分岐する場合に最適
- シンプルな記述で可読性が高い
- 複雑な条件を組み合わせるのには向かない
If文とSelect Caseを使い分けて、可読性の高いVBAコードを書いていきましょう!
最後に
マクロ(VBA)の「Select Case」を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!