VBAで条件分岐を行う場合、If…Then…Else文 を使うのが一般的ですが、条件が多くなるとコードが読みにくくなります。そこで役立つのが Select Case文 です。
Select Case文は、複数の条件分岐を簡潔に記述できる構文 であり、特に 特定の値に応じて処理を分ける場合に便利です。本記事では、Select Case文の基本構文と使い方について詳しく解説します。
目次
1. Select Case文の基本構文
VBAのSelect Case文は以下のような構文になります。
Select Case 比較する値
Case 条件1
'条件1に該当する場合の処理
Case 条件2
'条件2に該当する場合の処理
Case 条件3, 条件4
'条件3または条件4に該当する場合の処理
Case Else
'どの条件にも該当しない場合の処理
End Select
ポイント
Select Case
の後に評価したい変数や値を記述するCase
の後に条件値を指定し、それに一致する場合の処理を書くCase Else
を使うとどの条件にも当てはまらない場合の処理を記述できる
2. Select Caseの基本的な使い方
(1) 数値の判定
例:1〜3の数値に応じてメッセージを表示する
Sub CheckNumber()
Dim num As Integer
num = Range("A1").Value 'A1の値を取得
Select Case num
Case 1 'num
の値
が 1 なら中の処理
MsgBox "A1の値は1です"
Case 2 'num
の値
が 2 なら中の処理
MsgBox "A1の値は2です"
Case 3 'num
の値
が 3 なら中の処理
MsgBox "A1の値は3です"
Case Else 'num
の値
が 1,2,3 以外なら中の処理
MsgBox "A1の値は1〜3ではありません"
End Select
End Sub
ポイント
Select Case num
で変数num
の値をチェックCase 1
,Case 2
,Case 3
でそれぞれの数値に応じた処理を実行Case Else
で 1〜3以外の値が入力された場合の処理 を記述
(2) 文字列の判定
例:曜日を判定してメッセージを表示する
Sub CheckWeekday()
Dim dayOfWeek As String
dayOfWeek = LCase(Range("A1").Value) 'A1の値を小文字に変換して取得
Select Case dayOfWeek
'
がの値
dayOfWeek
"
monday
"
な
ら中の処理
Case "monday"
MsgBox "今日は月曜日です"
'
がの値
dayOfWeek
"
"
tuesday
な
ら中の処理
Case "tuesday"
MsgBox "今日は火曜日です"
'
がの値
dayOfWeek
"
" または "
wednesday
thursday
"
な
ら中の処理
Case "wednesday", "thursday"
MsgBox "週の半ばです"
'
がの値
dayOfWeek
"
"
friday
な
ら中の処理
Case "friday"
MsgBox "今日は金曜日です!"
'
がの値
dayOfWeek
"
" または "
saturday
"
sunday
な
ら中の処理
Case "saturday", "sunday"
MsgBox "今日は週末です"
上記
'
がの値
dayOfWeek
以外な
ら中の処理
Case Else
MsgBox "正しい曜日を入力してください"
End Select
End Sub
ポイント
LCase()
を使って 入力を小文字に統一(”Monday” も “monday” に変換される)Case "wednesday", "thursday"
のように 複数の値をまとめて処理 できるCase Else
で 予期しない入力に対応 可能
(3) 数値の範囲を判定
例:点数に応じて評価を表示する
編集するSub CheckScore()
Dim score As Integer
score = Range("A1").Value 'A1の値を取得
Select Case score
Case 90 To 100 '90~100の間
MsgBox "評価: A"
Case 80 To 89 '80~89の間
MsgBox "評価: B"
Case 70 To 79 '70~79の間
MsgBox "評価: C"
Case 60 To 69 '60~69の間
MsgBox "評価: D"
Case Is < 60 '59以下、Is
= score
MsgBox "評価: F(不合格)"
Case Else
MsgBox "無効な点数です"
End Select
End Sub
ポイント
Case 90 To 100
のように 範囲指定が可能Case Is < 60
のように 比較演算子を使うことも可能Case Else
で 無効な点数への対応ができる
3. If文とSelect Case文の違い
比較項目 | If文 | Select Case文 |
---|---|---|
条件の種類 | 数値、文字列、論理式 | 単一の値を比較 |
可読性 | 条件が増えると複雑に | 複数の条件を簡潔に記述できる |
範囲指定 | If x >= 90 And x <= 100 Then | Case 90 To 100 で簡潔に書ける |
複数条件の指定 | If x = 1 Or x = 2 Then | Case 1, 2 で書ける |
用途 | 条件が複雑な場合 | 特定の値に応じた処理に適している |
どちらを使うべき?
- 単純な条件分岐(Aなら○、Bなら×)⇒
Select Case
- 複雑な条件(複数の変数を使うなど) ⇒
If...Then...Else
4. まとめ
ポイント | 説明 |
---|---|
Select Caseは、値ごとの分岐に最適 | 特定の値に応じた処理を簡潔に記述できる |
複数の値を一括処理可能 | Case "A", "B", "C" のように記述できる |
範囲指定ができる | Case 90 To 100 のように書ける |
If文との使い分けが重要 | 条件が単純なら Select Case 、複雑なら If |
VBAの Select Case
を活用すると、可読性が向上し、条件分岐のコードをシンプルに記述できます。特に 特定の値ごとに異なる処理を実行する 場面で役立つので、ぜひ活用してみてください!
コメント