ラピードアクト株式会社

技術記事:ExcelVBAで仕事を効率化しようVol.20

みなさん、こんにちは。
ITソリューション事業部の林です。

本記事では、ExcelVBAのテクニックを紹介・解説いたします。

今回紹介するのは、「Select Caseを用いた条件分岐」です。

【目次】

  1. Select Caseとは
  2. Select Caseの構文
  3. 使用例
  4. 終わりに

それでは、始めましょう!

Select Caseとは

Select Caseステートメントは、プロシージャの処理を条件分岐させることができます。
Ifステートメントも条件分岐の一種ですが、IfとSelect Caseは挙動が異なります。

両者の分岐の特徴は以下の通りです。
If :真偽(True/False)判定で分岐
Select Case:複数の条件で分岐

複数の条件分岐では、例えば「変数の値が1なら処理Aを実行、変数の値が2なら処理Bを実行…」のように、分岐条件と処理をそれぞれ実行します。
これにより、1つのステートメントで複数の条件分岐を行えるようになります。

Select Caseの構文

Select Case 判定対象
Case 条件1
  処理A ←条件1を満たす場合に実行する処理
Case 条件2
  処理B ←条件2を満たす場合に実行する処理
Case Else
  処理C ←条件1,2両方満たさない場合に実行する処理
End Select

判定対象には、オブジェクトや変数などを指定します。関数を使用して、条件照合することも可能です。
Case句の後ろには、判定対象に対する条件を記述し、その次の行に実行する処理を記述します。
Case Elseは、いずれの条件も満たさなかった場合の処理になります。

補足になりますが、Ifステートメントでも以下のように書けば、複数の条件分岐が可能になります。
If 条件1 Then
  処理A
ElseIf 条件2 Then
  処理B
Else
  処理C
End If

Select CaseとIfの使い分け基準は、ソースコードが読みやすいかどうかです。
Ifでは、AndやOrを使って複雑な条件を指定できる反面、やや読みにくい傾向があります。
Select Caseは1つの判定対象に対する分岐になるので、シンプルに記述できるため読みやすくなります。
どちらを使った方が読みやすいか判断して、臨機応変に使い分けてください。

使用例

使用例① 判定対象が数値の場合
このケースでは、「数値指定」「数値比較」「数値範囲指定」の3種類の書き方があります。
数値判定の場合、条件の照合は上から順に行われますので、その点は注意しましょう。

Sub ExcelVBA_020_Example1()
    '===使用例①===
    '数値指定
    Dim 判定対象 As Long
    判定対象 = InputBox("0~9いずれかを入力してください", , 0)
    Select Case 判定対象
    Case 0
        MsgBox "0が入力されました 入力値:" + 判定対象, vbInformation
    Case 1, 3, 5, 7, 9
        MsgBox "奇数が入力されました 入力値:" + 判定対象, vbInformation
    Case 2, 4, 6, 8
        MsgBox "偶数が入力されました 入力値:" + 判定対象, vbInformation
    Case Else
        MsgBox "9より大きい数値が入力されました 入力値:" + 判定対象, vbInformation
    End Select
    
    '数値比較
    判定対象 = InputBox("あなたの年齢を入力してください", , 0)
    Select Case 判定対象
    Case Is < 20
        MsgBox "あなたは未成年です 入力値:" + 判定対象, vbInformation
    Case Is < 60
        MsgBox "あなたは成人しています 入力値:" + 判定対象, vbInformation
    Case Is >= 60
        MsgBox "あなたは還暦を超えています 入力値:" + 判定対象, vbInformation
    End Select
    
    '数値範囲指定
    判定対象 = InputBox("あなたの誕生した年を入力してください(西暦4桁)", , 0)
    Select Case 判定対象
    Case 1926 To 1988
        MsgBox "あなたの誕生年は[昭和]です 入力値:" + 判定対象, vbInformation
    Case 1989 To 2018
        MsgBox "あなたの誕生年は[平成]です 入力値:" + 判定対象, vbInformation
    Case 2019 To 2021
        MsgBox "あなたの誕生年は[令和]です 入力値:" + 判定対象, vbInformation
    Case Else
        MsgBox "あなたの誕生年は[昭和][平成][令和]には該当しません 入力値:" + 判定対象, vbInformation
    End Select
End Sub

使用例② 判定対象が文字列の場合
ワークシートのA1セルに曜日が入力されている前提です。
ここでは、判定対象に対してLeft関数を使用して、文字列を照合しています。

Sub ExcelVBA_020_Example2()
    '===使用例②===
    Dim 判定対象 As String
    判定対象 = Cells(1, 1).Value 'A1セルの値を判定対象に用いる
    Select Case Left(判定対象, 1)
    Case "月", "火", "水", "木", "金"
        MsgBox "平日です 入力値:" + 判定対象, vbInformation
    Case "土", "日"
        MsgBox "休日です 入力値:" + 判定対象, vbInformation
    Case Else
        MsgBox "判定できませんでした 入力値:" + 判定対象, vbInformation
    End Select
End Sub

終わりに

以上、Select Caseステートメントの解説になります。
Ifの条件分岐が多くなりすぎた場合は、Select Caseに書き換えられないか検討してみましょう。
2つのステートメントを組み合わせることで、Ifだけの条件分岐よりも処理の流れをつかみやすくなり、開発しやすくなります。

それでは、また次回お会いしましょう!