Excel VBA | Select Case文

VBA
スポンサーリンク

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を必ず用意して、想定外の入力をチェックするのが良い習慣。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました