みなさん、こんにちは。
ITソリューション事業部の林です。
本記事では、ExcelVBAのテクニックを紹介・解説いたします。
今回紹介するのは、「Select Caseを用いた条件分岐」です。
【目次】
それでは、始めましょう!
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だけの条件分岐よりも処理の流れをつかみやすくなり、開発しやすくなります。
それでは、また次回お会いしましょう!