ここでは、VBA の Select Case 文において記述可能な処理の分岐方法について掲載しています。C言語における switch 文などと似たような機能ですが、記述の仕方は若干異なります。ついつい、間違えがちえてしまうので気をつけたいものです。
スポンサーリンク
基本的な Select Case 文の記述方法
VBA において、Select Case 文の基本的な記述方法は次の通りです。数値だけではなく、文字列でも処理を分岐させることができます。
Dim str As String
str = "春一番"
Select Case str
Case "春一番"
MsgBox "春"
Case "夏一番"
MsgBox "夏"
Case "秋一番"
MsgBox "秋"
Case "冬一番"
MsgBox "冬"
Case Else ' 上記以外の場合
MsgBox "あの世"
End Select
C言語との違いは break 等が必要ないことです。上記の場合でも出力されるメッセージは「春一番」だけです。いくつもメッセージが出力されるようなことはありません。
複数の条件を一致させる(カンマ)
では、複数の条件の場合に同じ処理をさせるにはどのようにするかと言うと、VBA では複数の条件をカンマで区切って記述することができます。
Select Case str
Case "春一番", "夏一番", "秋一番", "冬一番"
MsgBox "春夏秋冬のどれか"
Case Else ' 上記以外の場合
MsgBox "あの世"
End Select
Select Case で比較演算を行う( Case Is )
VBA では Case Is によって比較演算を行って処理分岐させることもできます。なかなかに機能が豊富です。
Dim 偏差値 As Integer
偏差値 = 40 ' ギリギリ人判定です
Select Case 偏差値
Case Is < 40
MsgBox "人ではありません"
Case Is < 60
MsgBox "凡人です"
Case Is < 80
MsgBox "上出来です"
Case Else
MsgBox "神です"
End Select
Select Case で範囲指定( A To Z )
VBA ではさらに、範囲指定もできます。恐るべしです。直感的に分かりやすいと思いますので説明の必要はないと思います。また、比較演算子を使った Case Is と一緒にも使用できます。
Dim 偏差値 As Integer
偏差値 = 40 ' ギリギリ人判定です
Select Case 偏差値
Case Is < 40
MsgBox "人ではありません"
Case 40 To 59
MsgBox "凡人です"
Case 60 To 79
MsgBox "上出来です"
Case Else
MsgBox "神です"
End Select
駄目な Select Case の記述方法
VBA では条件に数値だけではなく文字列も使用することができます。よって、次のように記述して処理を分岐させようと考える人がいるかもしれませんが、以下のように数値と文字列を同時に判定するような記述は止めた方が無難です。なお、このように発想すること自体、問題ありです。
次の VBA サンプルスクリプトは期待を裏切り、「数字の1」とダイアログが出力されてしまいます。
Dim str As String
str = "1"
Select Case str
Case 1
MsgBox "数字の1"
Case "1"
MsgBox "文字列の1"
Case Else
MsgBox "セクシーダイナマイト"
End Select