Excel VBAのSelect Case文で、文字列を条件として処理を分岐させたい場合に、複雑なIf...ElseIf文よりもコードを読みやすくすることができます。Select Caseを使用して文字列に基づいて処理を行う方法について説明します。
目次
Excel VBAでSelect Caseを使用して文字列を条件に処理を行う方法
Select Case文の基本構文
Select Case文は、特定の変数や値を基準として、結果的に一致する条件ごとに異なる処理を実行するための構文です。
Select Case 変数
Case 条件1
' 条件1に一致する場合の処理
Case 条件2
' 条件2に一致する場合の処理
Case Else
' その他の場合の処理
End Select
- 変数:判定の基準となる変数や値です。
- Case 条件: 条件に一致する場合に実行される処理です。
- Case Else :どの
Case条件にも一致しない場合に実行される処理です。
文字列を使ったSelect Case例
文字列を条件として、異なる処理を実行する例を紹介します。
Sub SelectCaseWithString()
Dim color As String
color = "Red"
Select Case color
Case "Red"
MsgBox "色は赤です。"
Case "Blue"
MsgBox "色は青です。"
Case "Green"
MsgBox "色は緑です。"
Case Else
MsgBox "色は不明です。"
End Select
End Sub
変数colorの値に基づいて、色を判定し、それぞれの色に応じたメッセージを表示します。color"Red"は、「色は赤です。」と表示されます。
複数の文字列を条件付きSelect Case
複数の文字列条件を一度に指定することもできます。
Sub SelectCaseMultipleStrings()
Dim season As String
season = "Spring"
Select Case season
Case "Spring", "Summer"
MsgBox "暖かい季節です。"
Case "Fall", "Winter"
MsgBox "寒い季節です。"
Case Else
MsgBox "季節が不明です。"
End Select
End Sub
seasonがまたは"Spring"の"Summer"場合、「暖かいです。」というメッセージが表示され、"Fall"や"Winter"の場合は「寒い季節です。」と表示されます。 複数の文字列を条件にまとめて季節を処理したい場合に便利です。
大文字と小文字の区別をしないSelect Case
VBA のSelect Case文は、大文字と小文字を区別しません。そのため、"Red"と"red"は同じとみなされます。区別したい場合は、文字列を小文字または大文字に変換して判定する方法があります。
【使用例: 大文字・小文字を区別するSelect Case】
Sub SelectCaseWithCaseSensitivity()
Dim color As String
color = "Red"
' 小文字に変換して判定
Select Case LCase(color)
Case "red"
MsgBox "色は赤です。"
Case "blue"
MsgBox "色は青です。"
Case Else
MsgBox "色は不明です。"
End Select
End Sub
LCase関数を使って文字列を小文字に変換し、常に小文字で"Red"や"RED"を"red"と判定を行います。
ワイルドカードを使った文字列の部分一致判定
Select Caseは完全一致のみで部分一致はサポートしていませんが、Like演算子を使って部分一致を判定することができます。
Sub SelectCaseWithPartialMatch()
Dim fruit As String
fruit = "Apple"
Select Case True
Case fruit Like "*Apple*"
MsgBox "リンゴが含まれています。"
Case fruit Like "*Banana*"
MsgBox "バナナが含まれています。"
Case Else
MsgBox "該当する果物はありません。"
End Select
End Sub
変数fruitに「Apple」が含まれているかどうかを判定します。fruitの値が「Green Apple」や「Apple Pie」でも、"*Apple*"一致するため「リンゴが含まれています。」と表示されます。
Select Caseの入れ子構造で複雑な条件分岐
Select Case文を入れることで、複雑な条件を実現することも可能です。
Sub NestedSelectCaseExample()
Dim department As String
Dim position As String
department = "Sales"
position = "Manager"
Select Case department
Case "Sales"
Select Case position
Case "Manager"
MsgBox "営業部のマネージャーです。"
Case "Staff"
MsgBox "営業部のスタッフです。"
End Select
Case "HR"
Select Case position
Case "Manager"
MsgBox "人事部のマネージャーです。"
Case "Staff"
MsgBox "人事部のスタッフです。"
End Select
Case Else
MsgBox "部署が不明です。"
End Select
End Sub
配置と職位の両方に基づいてメッセージが変わるように子をSelect Caseに入れています。例えば、departmentが"Sales"でありpositionが"Manager"であれば「営業部のマネージャーです。」と表示されます。
まとめ
Excel VBAでSelect Case使うと、文字列に基づいた複数な条件がある場合でもコードをすっきりと整理することができます。また、大文字・小文字の区別や部分一致判定を紹介した方法を参考にして、Select Case活用して効率的なコードを作成してみましょう。