Excel VBAの「Switch 関数」について解説します。
Switch 関数とは
Excel VBA の Switch 関数は、引数リスト(式と値のペア)を評価し、Trueと評価される最初の式に関連付けられた値を返します。複雑な条件分岐をスマートに制御できる便利な関数です。
複数の条件を比較する場合に、if文よりも効率的に記述できます。特に、複数の条件が特定の定数や変数の値に依存する場合に有効です。
Switch 関数の構文や引数の設定と実際の使い方について具体的に解説していきたいと思います。
Switch 関数(Visual Basic for Applications リファレンス)
構文(引数と戻り値)
Excel VBAの関数を使いこなすには、関数の構文を正しく理解しておくことが重要です。
構文
Switch(expr-1, value-1[, expr-2, value-2, …[, expr-n, value-n]])
引数
指定項目 | 説明 |
---|---|
expr | 【必須】評価する式を指定します |
value | 【必須】対応するexprが True のときに返す値を指定します |
※ expr と Value はペアで構成されます。ペアリングが正しくない場合は実行時エラーが発生します。
戻り値
すべての expr を評価し、最初にTrueを返した expr に対応する Value だけが戻り値となります。
※ 次の点に注意が必要です。
- expr(条件式) と Value(値) は必ずセットで記述します。正しくない場合はエラーが発生します。
- 複数の expr(条件式) が True でも、最初の True しか評価されないため設定や順序が重要です。
- expr(条件式) と Value(値) ともにエラー(除算エラーなど)がある場合、実行時エラーが発生します。
- Value(値) の型が混在している場合、戻り値を受ける変数の型に注意する必要があります。
- 次の場合は、Switch関数は Null を返します。
- True となる expr が存在しなかった場合
- True の expr に対応する Value が Null の場合
解説(使用例)
Switch 関数の使い方について、サンプルコードを使って解説します。
Switch 関数使用サンプル
Switch 関数の使用例を紹介します。
基本的な使用例
次の例は、条件式が True になると、その直後の値が返される簡単な例です。
'■Switch関数サンプル1(基本的な使用例)
Sub Switch_Sample01()
Dim i As Integer
Dim rep As String
i = 1
rep = Switch(i = 1, "Yes", i <> 1, "No")
MsgBox rep ' 1 = "Yes"
End Sub
変数 i に設定した値 1 が Switch 内の条件式 i = 1 が True なのでその直後に指定した値 Yes を返しました。

注意する点としては「Switch内の条件式はすべてが評価される」ということです。条件式は順番に評価され、最初に True を返したものだけが採用されます。また、条件式や値にエラーがある場合そこで中断されます。
Switchで日付から曜日名を取得する例
Choose関数で使用した例をSwitch関数に変更した例です。WeekDay関数を併用して、その戻り値(1~6)に対応する曜日文字を表示させます。
'■Switch関数サンプル2(曜日名を取得する例)
Sub Switch_Sample02()
Dim inputDate As Variant
Dim dayNum As Integer
Dim dayText As String
' InputBoxで日付を入力
inputDate = InputBox("調べたい日付を入力して!", "曜日調査")
If inputDate = "" Then Exit Sub 'キャンセル(未入力)→中止
' WeekDay関数で曜日の整数値を取得
dayNum = Weekday(inputDate)
dayText = Switch( _
dayNum = 1, "日", _
dayNum = 2, "月", _
dayNum = 3, "火", _
dayNum = 4, "水", _
dayNum = 5, "木", _
dayNum = 6, "金", _
dayNum = 7, "土")
' MsgBoxに結果を表示する
MsgBox inputDate & "は" & dayText & "曜日です!"
End Sub
はじめに InputBox で曜日を調べたい日付を入力します。

入力された日付を WeekDay 関数で曜日の整数値に変換して変数 dayNum に代入します。
Switch 関数で dayNum の値に対応する曜日文字を変数 dayText に返します。
MsgBox に表示する文字列を整形して次のように表示しました。

Switch関数の場合は、引数リストは式と値のペアにする必要があります。
一方、Choose関数の場合は、Choose(dayIndex, "日", "月", "火", "水", "木", "金", "土")
のように各値の前に条件式がないのでスッキリしています。
インデックス(数値)で値を選択(パターン選択やリスト参照)などの場合には Choose関数を使うほうが向いてると思います。
変動する数値に応じたランク分け例
次は、比較演算子を用いて数値に応じたランク分けを行うような場合の例です。
'■Switch関数サンプル3(数値に応じたランク分け例)
Sub Switch_Sample03()
Dim score 'As Integer
Dim rank As String
Redo:
score = InputBox("点数(1~100)を入力して!", "評価判定")
If score = "" Then Exit Sub 'キャンセル(未入力)→中止
If IsNumeric(score) = False Then GoTo Redo '再入力へ
rank = Switch( _
score > 100 Or score < 0, "False", _
score >= 90, "A", _
score >= 75, "B", _
score >= 60, "C", _
score >= 50, "D", _
True, "E")
If rank = "False" Then GoTo Redo '再入力へ
' MsgBoxに結果を表示する
MsgBox score & "点は " & rank & "評価です!"
End Sub
InputBox で数値(点数)を入力します。

score の値に応じてA~Eのランクを返します。Switch関数を使わない場合は、複雑な If…ElseIf…や Select Caseなどを使います。

基本的な動作と注意点
- Switch関数の基本的な動作は、左側の式が True になるまで順に評価し、その式の直後の値を返します。
- 複数の条件が True になる場合、最初の True 条件しか評価されないため順序設定が重要です。
- デバッグ時に Debug.Print などで戻り値を確認し、条件や順序設定に誤りがないか確認が必要です。
- 最後に True + 値 を置くことで、すべての条件に一致しない場合のフォールバック(デフォルト)処理を設定しておくことが可能です。
- 条件が明確かつ順序を意識して設計することで、コードの可読性と保守性も向上します。
おわりに
VBAの関数一覧はこちらからご参照ください。
VBAサンプルファイルダウンロードページのご案内
このページで使用したサンプルファイルの登録はありません(^^;
ページ内のコードをコピーしてご利用ください。
ダウンロードページへのリンクは下のカードクリックでジャンプできます。
よろしければご利用ください!
VBA の Switch 関数は、複数の「条件式」から True となる最初の式に関連付けられた値を返す条件分岐関数です。
Switch 関数の使いどころとしては次のような場合です。
条件分岐選定のポイントを次表にまとめました。
条件がブール演算の場合など
各条件式をすべて評価する
条件と値をすべて評価する
Trueの条件式以降は評価しない
入れ子構造が可能
Trueの条件式以降は評価しない
入れ子構造が可能
以上、この解説が少しでもみなさまのお役に立てたなら幸いです(^^;