〖ExcelVBA・マクロ〗Select Caseの使い方|If文より分かりやすい条件分岐の基本【初心者向け】

Select Caseの使い方 ExcelVBA

VBAで条件分岐を書くとき、まず思い浮かぶのは If ~ Then ではないでしょうか。

しかし、条件が増えてくるとこんなコードになりがちです。

If x = 1 Then
    MsgBox "月曜"
ElseIf x = 2 Then
    MsgBox "火曜"
ElseIf x = 3 Then
    MsgBox "水曜"
ElseIf x = 4 Then
    MsgBox "木曜"
ElseIf x = 5 Then
    MsgBox "金曜"
End If

このような場合、
もっと読みやすく・ミスしにくく書ける構文があります。
それが Select Case です。


スポンサーリンク
スポンサーリンク

Select Caseとは?

Select Caseは、
「ある1つの値が、どの条件に当てはまるか」を分岐させる構文です。

ポイントは次の2つです。

  • 比較する値は 1つだけ
  • 条件が多いほど、Ifより読みやすい

Select Caseの基本形

Select Case 値
    Case 条件1
        処理
    Case 条件2
        処理
    Case Else
        それ以外の処理
End Select

「値」を1回だけ書いて、
あとは Case ごとに条件を書いていくイメージです。


基本例①:数値で分岐する(初心者向け)

数値による分岐は、Select Caseの一番分かりやすい使い方です。

Sub Sample_SelectCase_Number()

    Dim dayNo As Long
    dayNo = 3

    Select Case dayNo
        Case 1
            MsgBox "月曜日"
        Case 2
            MsgBox "火曜日"
        Case 3
            MsgBox "水曜日"
        Case 4
            MsgBox "木曜日"
        Case 5
            MsgBox "金曜日"
        Case Else
            MsgBox "平日ではありません"
    End Select

End Sub

If文で書くより、
どの値がどの処理になるか一目で分かるのがメリットです。


基本例②:文字列で分岐する

Select Caseは文字列にも使えます。

Sub Sample_SelectCase_String()

    Dim status As String
    status = "完了"

    Select Case status
        Case "未処理"
            MsgBox "まだ処理されていません"
        Case "処理中"
            MsgBox "現在処理中です"
        Case "完了"
            MsgBox "処理が完了しました"
        Case Else
            MsgBox "不明な状態です"
    End Select

End Sub

ステータス判定・区分判定など、
業務マクロで非常によく使われる形です。


Select Caseで複数条件をまとめる

同じ処理をしたい条件が複数ある場合は、
カンマでまとめられます。

Select Case dayNo
    Case 1, 7
        MsgBox "休日"
    Case 2, 3, 4, 5, 6
        MsgBox "平日"
End Select

If文だとゴチャゴチャしやすい部分が、
とてもスッキリ書けます。


範囲指定もできる(Case Is / To)

数値の範囲で分岐する例

Sub Sample_SelectCase_Range()

    Dim score As Long
    score = 75

    Select Case score
        Case Is >= 80
            MsgBox "優"
        Case 60 To 79
            MsgBox "良"
        Case 40 To 59
            MsgBox "可"
        Case Else
            MsgBox "不可"
    End Select

End Sub

点数・金額・数量など、
範囲判定はSelect Caseが特に得意です。


If文とSelect Caseの使い分け

状況おすすめ
条件が1~2個If
同じ値で複数分岐Select Case
条件が増えそうSelect Case
範囲判定Select Case

迷ったら Select Case を選んでOK です。


初心者がやりがちなミス

① Caseを書いたのに End Select を忘れる

→ コンパイルエラーになります。

② Select Caseの値を毎回変えてしまう

Select Caseは「1つの値」を比較する構文です。
Case側で別の変数を使わないように注意しましょう。

③ Case Elseを書かない

想定外の値が来たときのために、
Case Else は基本的に書くのがおすすめです。


実務でのよくある使いどころ

  • ステータス判定(未処理/処理中/完了)
  • 区分コードによる分岐
  • 曜日・月別処理
  • 点数・金額ランク分け

「If文が長くなってきたな…」と思ったら、
Select Caseに書き換えるだけで、コードが一気に読みやすくなります。


まとめ:Select Caseは初心者こそ早めに覚えるべき

  • Select Caseは条件分岐を整理できる
  • If文より読みやすく、ミスしにくい
  • 数値・文字列・範囲すべて対応
  • 業務マクロで出番が非常に多い

VBAを学び始めたら、
If文の次に覚える構文としてSelect Caseは最優先です。

ぜひ、今書いているIf文を1つ、Select Caseに置き換えてみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

タイトルとURLをコピーしました