ExcelVBAで条件分岐を書くとき、多くの人が最初に思い浮かべるのは If 文や Select Case 文です。
しかし、条件がシンプルなのに If が長くなったり、Select Case を使うほどでもないのに構造が重くなったりする場面も少なくありません。
そうしたときに有効なのが Switch関数 です。
Switch関数は「条件と結果」を対で並べられるため、短く書ける反面、
使いどころを誤ると可読性が下がるという弱点もあります。
本記事では、Switch関数の基本構文から、If文・Select Case文との使い分け、
さらに 実務で壊れにくい書き方・再利用できる設計 までを丁寧に解説します。
目次
- ✅ Switch関数とは何かを正しく理解する
- ・Switch関数の基本構文
- ✅ Switch関数が向いているケース・向いていないケース
- ・Switch関数が向いているケース
- ・Switch関数が向いていないケース
- ✅ Switch関数の基本例(If文との比較)
- ・If文で書いた場合
- ・Switch関数で書いた場合
- ✅ 実務で使うSwitch関数の書き方(設計意図)
- ・設計方針
- ・コード例(評価ランクを返す関数)
- ✅ Switch関数とSelect Case文の使い分け
- ・Select Case文の特徴
- ・Switch関数の特徴
- ✅ Switch関数を使うときの注意点(実務での失敗例)
- ・よくある失敗例
- ✅ Switch関数を安全に使うための実務ルール
- ✅ VBAでの条件分岐設計の考え方(長期保守視点)
- ✅ まとめ:Switch関数は「値を決める」ために使う
✅ Switch関数とは何かを正しく理解する
Switch関数は一見便利ですが、
「If文の代わりとして何でも置き換えられる」と誤解されやすい関数です。
実務では、この誤解が原因で「後から読めないコード」になってしまうケースが多く見られます。
Switchは条件分岐のための構文ではなく、値を返す関数である点を理解していないと、
設計の段階で無理な使い方をしてしまいがちです。
まずは、Switch関数の本質を押さえ、
「どんな役割のときに使うものなのか」を整理しましょう。
・Switch関数の基本構文
Switch関数は、
条件1, 結果1, 条件2, 結果2, …
という形式で記述します。
result = Switch( _
condition1, value1, _
condition2, value2, _
condition3, value3 _
)
条件は True / False を返す式、
結果は 条件がTrueになったときに返す値 です。
最初に True になった条件の結果が返されます。
✅ Switch関数が向いているケース・向いていないケース
Switch関数は便利ですが、
すべての条件分岐をSwitchで書くのはおすすめできません。
実務では「使っていい場面」「避けるべき場面」を明確に分ける必要があります。
・Switch関数が向いているケース
- 条件が シンプルな比較 である
- 分岐ごとの処理が 値の返却のみ
- 条件数が 3〜5程度 に収まる
- 判定ロジックが 横並びで見える方が分かりやすい
・Switch関数が向いていないケース
- 各条件で 複数行の処理 が必要
- 条件が入れ子になる
- 途中で Exit や エラー処理が必要
- 後から条件が増える可能性が高い
この切り分けを意識するだけで、
Switch関数を使うべきかどうかの判断精度が一気に上がります。
✅ Switch関数の基本例(If文との比較)
Switch関数の良さは、If文と比較すると理解しやすくなります。
・If文で書いた場合
Dim rank As String
If score >= 80 Then
rank = "A"
ElseIf score >= 60 Then
rank = "B"
Else
rank = "C"
End If
・Switch関数で書いた場合
Dim rank As String
rank = Switch( _
score >= 80, "A", _
score >= 60, "B", _
True, "C" _
)
ここで重要なのは、
Switchは「代入する値」をまとめて書いているという点です。
処理を分岐しているのではなく、
「条件によって返す値を決めている」という考え方になります。
✅ 実務で使うSwitch関数の書き方(設計意図)
Switch関数を実務で使う場合、
「その場で直接書く」よりも、1段抽象化する 方が保守性が高くなります。
ここでは、実務を想定した設計例を示します。
・設計方針
- 条件分岐ロジックは 関数に閉じ込める
- 呼び出し側では 意味が分かる名前 で使う
- Switch関数は 1つの責務だけ に使う
・コード例(評価ランクを返す関数)
Public Function GetScoreRank(ByVal score As Long) As String
GetScoreRank = Switch( _
score >= 80, "A", _
score >= 60, "B", _
True, "C" _
)
End Function
なぜこの書き方にしているのか
- Switch関数を 直接Sub内に書かない ことで、
後から条件変更があっても影響範囲を限定できる - 関数名が 仕様書の代わり になる
- テスト・再利用がしやすい
✅ Switch関数とSelect Case文の使い分け
Switch関数とSelect Case文は、
見た目が似ているため混同されがちですが、
役割はまったく異なります。
・Select Case文の特徴
- 処理を分岐するための構文
- 複数行の処理を書ける
- 可読性が高い
- デバッグしやすい
・Switch関数の特徴
- 値を返すための関数
- 処理は書けない
- 短く書ける
- 条件と結果が1行で見える
「処理を分けたい」なら Select Case、
「値を決めたい」なら Switch
という切り分けが、実務では最も安全です。
参考:【VBA】Select Case文の使用例と適用パターン|条件分岐を効率化する方法
✅ Switch関数を使うときの注意点(実務での失敗例)
Switch関数は短く書ける分、
無理に詰め込みすぎると一気に読めなくなります。
・よくある失敗例
result = Switch( _
a > 10 And b < 5, "X", _
a <= 10 And b < 5, "Y", _
a > 10 And b >= 5, "Z", _
True, "Other" _
)
なぜ問題なのか
- 条件が複雑で 横に並べても理解できない
- 後から条件を追加すると破綻しやすい
- デバッグ時に どの条件がTrueか追いにくい
このような場合は、
素直にIf文やSelect Case文を使う方が安全です。
✅ Switch関数を安全に使うための実務ルール
実務でSwitch関数を使う場合、
以下のルールを守ることで「壊れにくいコード」になります。
- 条件は 単純な比較 に限定する
- 条件数は 最大でも5つ程度
- True を使った デフォルト値を必ず用意する
- Sub内に直接書かず、 Function化 する
- 条件の意味が分かるよう コメントか関数名で補足 する
✅ VBAでの条件分岐設計の考え方(長期保守視点)
条件分岐は、
「今動くか」よりも「1年後に読めるか」が重要です。
- 条件が増えそう → Select Case
- 値を返すだけ → Switch
- 処理が複雑 → If文
この判断軸を持っておくと、
コード全体の設計が一貫し、
後から見たときに「意図が分かるコード」になります。
参考:【VBA】If文の複数分岐を実現する方法|ネスト地獄を避けて実務で壊れない条件分岐を書く
✅ まとめ:Switch関数は「値を決める」ために使う
- Switch関数は 条件分岐の構文ではなく、値を返す関数
- シンプルな条件でのみ使うのが安全
- 実務では Function化して再利用 する
- 複雑な処理には If / Select Case を使う
- 「短く書ける」より「読める」を優先する
Switch関数を正しく使い分けられるようになると、
VBAコード全体の読みやすさと保守性が一段階上がります。
Switch関数のような条件分岐は、
コードを短く書くためのテクニックというより、
「どこまでを自動化し、どこを人の判断に残すか」を整理するための道具でもあります。
Excel業務では、すべてを自動化すればよいとは限らず、
あえて手作業を残した方が安全・効率的なケースも少なくありません。
VBAやRPAを使う前に、
「そもそもどこまで改善すべきか」を考えたい場合は、
以下の記事も参考になります。