Excel VBAの Select Case を初心者向けにやさしく解説
最初は「もし〜なら…」と書ける If 文で十分ですが、選択肢が増えると読みづらくなります。そんなときに使うのが Select Case。ひとつの値をいくつもの候補と比べる場面で、コードを見やすく整理できます。
基本の形と考え方
- 考え方: 「この値がどのケースに当てはまる?」を順番にチェックして、最初に当たった処理だけを実行します。
- 書き方:
Select Case 対象の値
Case 値1
' 値1のときの処理
Case 値2
' 値2のときの処理
Case Else
' どれにも当てはまらないときの処理
End Select
VB- ポイント:
- 対象は「ひとつの値」。それを様々な「Case(条件)」で分ける。
- Case Else は「どれにも当てはまらない最後の受け皿」。
If 文との違いが一目でわかる例
例題: 点数で評価を表示(悪い/普通/良い)
- If 文だとこうなる:
Dim score As Integer
score = 75
If score < 60 Then
MsgBox "悪い"
ElseIf score < 80 Then
MsgBox "普通"
Else
MsgBox "良い"
End If
VB- Select Case なら読みやすい:
Dim score As Integer
score = 75
Select Case score
Case Is < 60
MsgBox "悪い"
Case 60 To 79
MsgBox "普通"
Case Is >= 80
MsgBox "良い"
Case Else
MsgBox "想定外の値"
End Select
VB- 違いの核心:
対象(score)を最初に出して、範囲や条件をすっきり並べられるので、選択肢が増えるほど Select Case の方が読みやすくなります。
よく使う書き方パターン
- 複数の値をまとめる
Select Case Weekday(Date) ' 1=日曜, 7=土曜(既定設定)
Case 1, 7
MsgBox "週末です"
Case Else
MsgBox "平日です"
End Select
VB- 範囲で指定する
Dim age As Integer
age = 18
Select Case age
Case 0 To 12
MsgBox "子ども"
Case 13 To 19
MsgBox "ティーン"
Case 20 To 64
MsgBox "大人"
Case Is >= 65
MsgBox "シニア"
Case Else
MsgBox "年齢が不正です"
End Select
VB- 大小比較(Is を使う)
Dim temperature As Double
temperature = 28.5
Select Case temperature
Case Is < 10
MsgBox "とても寒い"
Case 10 To 24
MsgBox "過ごしやすい"
Case Is >= 25
MsgBox "暑い"
End Select
VB実践的な例題
例題1: メニュー番号で処理を分ける
- 目的: ユーザーが番号を入力すると、対応する処理を実行。
Sub MenuExample()
Dim choice As Integer
choice = InputBox("1:集計, 2:グラフ, 3:書き出し を選んでください")
Select Case choice
Case 1
MsgBox "集計を開始します"
Case 2
MsgBox "グラフを作成します"
Case 3
MsgBox "CSVに書き出します"
Case Else
MsgBox "無効な選択です"
End Select
End Sub
VB例題2: 文字で判定(大文字・小文字も扱える)
- 目的: 入力された文字で方向を判定(A=左、D=右など)。
Sub DirectionExample()
Dim key As String
key = UCase(InputBox("方向キーを入力してください(A/D/W/S)"))
Select Case key
Case "A"
MsgBox "左に移動"
Case "D"
MsgBox "右に移動"
Case "W"
MsgBox "上に移動"
Case "S"
MsgBox "下に移動"
Case Else
MsgBox "不明な入力です"
End Select
End Sub
VB例題3: 複数条件の組み合わせ(前処理で単純化)
- 目的: 「会員種別」と「購入金額」から割引率を決める。
複雑に見える条件は、先に「評価用のひとつの値」にまとめると Select Case に落とし込みやすい。
Function CalcDiscount(memberType As String, amount As Currency) As Double
Dim key As String
memberType = UCase(memberType)
' 条件をひとつのキーにまとめる
If amount >= 10000 Then
key = memberType & "_HIGH"
Else
key = memberType & "_LOW"
End If
Select Case key
Case "VIP_HIGH": CalcDiscount = 0.20
Case "VIP_LOW": CalcDiscount = 0.15
Case "REG_HIGH": CalcDiscount = 0.10
Case "REG_LOW": CalcDiscount = 0.05
Case Else: CalcDiscount = 0
End Select
End Function
VBつまずきやすいポイントとコツ
- Case の順序に注意: 最初に一致した Case だけが実行される。重なり得る範囲は「狭い方→広い方」の順に並べると安全。
- Case Else を忘れない: 想定外の値の受け皿に。バグの早期発見にも役立つ。
- 対象はひとつにする: 複数の変数で分岐したくなったら、前処理で「評価用のひとつの値」にまとめるとシンプルになる。
- 文字比較は大文字・小文字をそろえる: UCase/LCase を使うと比較が安定する。
- 読みやすさ重視: 選択肢が3つ以上なら Select Case を検討。2つだけなら If でも十分。
いつ Select Case を選ぶべき?
- 選択肢が多いとき: 例)1〜5のメニュー、複数のコード値判定。
- 連続する範囲や段階があるとき: 例)点数帯、年齢区分、温度帯。
- 同じ対象を何度も比べるとき: ひとつの値に対する複数のケース整理に最適。
小さな練習課題
- 課題1: 曜日番号(1〜7)を受け取り、「平日/週末」を表示する Select Case を作る。
- 課題2: 0〜100の点数から「不可/可/良/優」を判定する。閾値は自由に決めてOK。
- 課題3: 商品カテゴリ文字列(”A”,”B”,”C”)で税率を 8%/10%/0% に分ける。知らないカテゴリは 0% にせずメッセージを表示。
解答例と解説
課題1: 曜日番号(1〜7)を受け取り、「平日/週末」を表示
解答例
Sub CheckDay()
Dim dayNum As Integer
dayNum = InputBox("曜日番号を入力してください (1=日曜, 7=土曜)")
Select Case dayNum
Case 1, 7
MsgBox "週末です"
Case 2 To 6
MsgBox "平日です"
Case Else
MsgBox "1〜7の数字を入力してください"
End Select
End Sub
VB解説
Case 1, 7→ 値が1か7なら「週末」。Case 2 To 6→ 2〜6なら「平日」。Case Else→ 想定外の入力を受け止める安全策。
課題2: 点数(0〜100)から「不可/可/良/優」を判定
解答例
Sub CheckScore()
Dim score As Integer
score = InputBox("点数を入力してください (0〜100)")
Select Case score
Case Is < 60
MsgBox "不可"
Case 60 To 69
MsgBox "可"
Case 70 To 89
MsgBox "良"
Case 90 To 100
MsgBox "優"
Case Else
MsgBox "点数は0〜100の範囲で入力してください"
End Select
End Sub
VB解説
Case Is < 60→ 60未満は「不可」。Case 60 To 69→ 範囲指定で「可」。Case 70 To 89→ 「良」。Case 90 To 100→ 「優」。Case Else→ 範囲外の入力をチェック。
課題3: 商品カテゴリ文字列(”A”,”B”,”C”)で税率を分ける
解答例
Sub CheckTax()
Dim category As String
category = UCase(InputBox("商品カテゴリを入力してください (A/B/C)"))
Select Case category
Case "A"
MsgBox "税率は8%です"
Case "B"
MsgBox "税率は10%です"
Case "C"
MsgBox "税率は0%です"
Case Else
MsgBox "不明なカテゴリです"
End Select
End Sub
VB解説
UCaseで入力を大文字に変換 → “a”と入力しても”A”として判定できる。Case "A"→ 税率8%。Case "B"→ 税率10%。Case "C"→ 税率0%。Case Else→ 想定外のカテゴリを受け止める。
総まとめ
- Select Caseは「ひとつの値を複数の候補と比べる」処理に最適。
- 範囲指定や複数指定ができるので、If文より読みやすい。
- Case Elseを必ず用意して、想定外の入力をチェックするのが良い習慣。
