概要
Switch
関数は、Excel VBAで複数の条件式を順番に評価し、最初に真(True)と評価された条件に対応する値を返す関数です。If...ElseIf
構造の代替として使用でき、コードの簡潔さと可読性を向上させることができます。複数の条件分岐を簡潔に記述できるため、特に評価条件が多い場合に便利です。
構文
Switch(条件1, 値1, 条件2, 値2, ..., 条件N, 値N)
パラメータ
-
条件
評価する論理式を指定します。条件が真の場合、その条件に対応する値が返されます。
-
値
条件が真と評価された場合に返される値を指定します。
戻り値
Switch
関数は、最初に真と評価された条件に対応する値を返します。すべての条件が偽の場合はNull
を返します。
説明
Switch
関数は、条件と値のペアを複数指定し、各条件を順番に評価します。最初に真と評価された条件のペアにある値を返し、それ以降の条件は評価されません。条件が全て偽の場合は、Null
が返されます。
-
条件と値のペアが多いほど、柔軟な条件分岐が実現できます。
-
複雑な
If...ElseIf
構文をシンプルに記述するための代替手段として便利です。
使用例
基本的な使用例 - 評価に応じたメッセージを返す
Sub ExampleSwitch()
Dim score As Integer
Dim result As String
score = 85
result = Switch( _
score >= 90, "優秀", _
score >= 70, "良好", _
score >= 50, "可", _
score < 50, "不可" _
)
MsgBox result ' 結果: "良好"
End Sub
この例では、得点に応じて評価を行い、条件に合致する最初の評価結果を表示します。
曜日を判定する例
Sub DayOfWeekExample()
Dim dayNum As Integer
Dim dayName As String
dayNum = Weekday(Now)
dayName = Switch( _
dayNum = 1, "日曜日", _
dayNum = 2, "月曜日", _
dayNum = 3, "火曜日", _
dayNum = 4, "水曜日", _
dayNum = 5, "木曜日", _
dayNum = 6, "金曜日", _
dayNum = 7, "土曜日" _
)
MsgBox "今日は " & dayName
End Sub
この例では、現在の日付の曜日を判定し、その名前を表示します。
商品の価格帯を評価する
Sub ProductPriceCategory()
Dim price As Double
Dim category As String
price = 1500
category = Switch( _
price > 2000, "高価", _
price > 1000, "中価格", _
price <= 1000, "安価" _
)
MsgBox "この商品のカテゴリーは " & category & " です。"
End Sub
この例では、商品の価格に基づいて価格帯を判定し、結果を表示します。
応用例
スコアによるグレードの判定
テストのスコアに応じてグレードを判定し、結果を表示するスクリプトです。
Sub GradeEvaluation()
Dim score As Integer
Dim grade As String
score = 78
grade = Switch( _
score >= 90, "A", _
score >= 80, "B", _
score >= 70, "C", _
score >= 60, "D", _
score < 60, "F" _
)
MsgBox "あなたのグレードは " & grade & " です。"
End Sub
このスクリプトでは、スコアに基づいてグレード(AからF)を評価し、結果をユーザーに伝えます。
注意点
-
Switch
関数は、条件が複雑になる場合や条件の数が増えると見通しが悪くなることがあります。適切なコメントやコードの整理を行い、可読性を保つようにしてください。 -
全ての条件が偽となる場合、戻り値は
Null
となるため、Null
の取り扱いに注意が必要です。 -
すべての条件式は左から順に評価され、最初に真と評価された条件が見つかった時点でそれ以降の条件は評価されません。
Switch
関数は、複数の条件分岐を効率的に管理できるため、シンプルでメンテナンスしやすいコードの記述に役立ちます。条件によって異なる処理が必要な場面で、その柔軟性を活かして適切な結果を返すために使用してみましょう。