VBAのSelect Caseの使い方|範囲指定・複数値・Case Elseの書き方

条件分岐には If〜ThenSelect Case の2種類があります。2〜3パターン程度なら If が使いやすいですが、4パターン以上になると Select Case の方がコードがすっきりして読みやすくなります。

この記事では、Select Case の基本構文・具体例・範囲指定や複数条件の応用を解説します。

Select Caseの基本構文とは?

Select Case で確認する値を指定し、各 Case にその値がどうなっているかを書きます。

Select Case 確認する値
    Case 条件1
        実行する処理1
    Case 条件2
        実行する処理2
    Case Else
        どれにも当てはまらないときの処理
End Select

Select Case で始まり End Select で終わります。Case Else はどの条件にも当てはまらなかった場合の処理で、不要なら省略できます。

セルの値に応じて背景色を変えるには?

A1セルに入力されたタスクの優先度に応じて、背景色を4パターンで変更する例です。

Select Case Cells(1, 1).Value
    Case "最優先"
        Cells(1, 1).Interior.Color = RGB(255, 0, 0)      ' 赤
    Case "優先"
        Cells(1, 1).Interior.Color = RGB(237, 125, 49)   ' 橙
    Case "通常"
        Cells(1, 1).Interior.Color = RGB(255, 255, 0)    ' 黄
    Case "余裕あり"
        Cells(1, 1).Interior.Color = RGB(173, 216, 230)  ' 水色
    Case Else
        Cells(1, 1).Interior.ColorIndex = xlNone         ' 色なし
End Select

Select Case の横に書いた Cells(1,1).Value がどの Case に一致するかで処理が分かれます。

範囲指定や複数条件で使うには?

数値の範囲や複数の値をまとめて条件指定することもできます。

' 範囲指定:1〜10は優、11〜20は良
Select Case score
    Case 1 To 10
        label = "優"
    Case 11 To 20
        label = "良"
    Case Else
        label = "可"
End Select
' 複数値指定:1・3・5のいずれか
Select Case num
    Case 1, 3, 5
        MsgBox "奇数です"
    Case 2, 4, 6
        MsgBox "偶数です"
End Select

IfとSelect Caseの使い分けとは?

条件の数と内容によって使い分けるのが基本です。

場面向いている構文
2〜3パターンの分岐If〜ElseIf〜Else
4パターン以上の分岐Select Case
同じ変数の値で複数パターン分岐Select Case
複数の変数を組み合わせた条件If〜And/Or

まとめ

  • Select Case 値 で確認する値を指定し、各 Case で処理を分ける
  • Case Else でどの条件にも当てはまらないときの処理を書ける
  • Case 1 To 10 で範囲指定、Case 1, 3, 5 で複数値指定もできる
  • 4パターン以上の分岐では If〜ElseIf より Select Case の方がすっきり書ける
  • 複数の変数を組み合わせた複雑な条件は If〜And/Or の方が適している

よくある質問

Select CaseはIfと比べて処理速度が違いますか?

ほとんど差はありません。どちらを使うかは主に読みやすさで判断します。同じ変数を多くのパターンと比較する場合は Select Case の方がコードが整理されます。

文字列と数値を混在させて条件指定できますか?

できません。Select Case で確認する値の型と Case の型を一致させる必要があります。文字列を確認する場合は Case "文字列"、数値なら Case 1 のように書きます。

Case内の処理を複数行書くことはできますか?

できます。次の CaseEnd Select が来るまでの間に何行でも処理を書けます。複数のセルを操作したり変数に代入したりする処理も問題なく書けます。

Select Caseでは大文字・小文字を区別しますか?

デフォルトでは区別しません。区別したい場合はモジュールの先頭に Option Compare Binary と書くことで区別するモードになります。

Select Caseの中にFor〜NextやIfを入れることはできますか?

できます。各 Case ブロックの中に For〜NextIf〜End If を入れることができます。複雑な処理でも各パターンごとに整理して書けます。


動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール