Switch関数は、”複数条件の判断”をシンプルな式で表すことのできる関数です。2択以上の選択肢になりそうな場合は、この関数の使用を検討してみてください。
本記事では、基本的な構文や具体的な使い方について解説します。
Switch関数とは
Switch関数は、複数の条件を順番に判断して、最初に「True(合致)」となった条件に対応する値を返す関数です。
Accessの条件/選択系関数といえば、IIf関数がまっさきに候補に挙がると思いますが、IIf関数で3択以上の判定を行うためには、IIf関数をネスト(同じ関数を重ねていくこと)する必要があり、とても複雑な式になります。
Switch関数は、「もしAなら〇〇、それ以外でBなら◆◆、それ以外でCなら◎◎」というロジックを、ネストされたIIf関数より簡潔に記述できます。

多分岐条件をスッキリ書きたいときに便利です。
構文
Switch( 式1,値1,式2,値2,…式N,値N )
各引数の内容は次のとおりです。
| 引数 | 必須/省略 | 内容 |
|---|---|---|
| 式1,式2… | 必須(式2以降は省略可) | 判定したい条件式 |
| 値1,値2… | 必須(値2以降は省略可) | 条件がTrueのときに返す値 |
式1がTrueなら値1を返す→式1がFalseなら式2を判定する → Trueなら値2を返す。…という流れで進み、どの式もTrueにならなければ、返り値はNullになります。
注意点
Switch関数は、全ての式を判定します。つまり式1がTrueになることで「返す値」が決まっていても、後続式も 判定されます。よって式内で“ゼロ除算”などエラーになる可能性があると、その式がスキップされてもエラー発生のリスクがあります。このあたりはIIf関数と同じ仕様といえます。
具体例
基本的なパターン
Switch([点数]>=90, "A",[点数]>=80, "B",[点数]>=70, "C",[点数]>=60, "D",True,"E")
点数フィールドの値を左から順番に判定し、合致した点数によりA~Dの値(成績ランク)を返します。
たとえば、点数フィールドが86点であれば90点以下80点以上であるため、Bを返します。
なお、「どの条件にも当てはまらない」場合に備えて、最後に True, "E" を入れることでデフォルト値として扱っています。
あいまい検索を用いたパターン
Switch(
[住所] Like "*東京*", "関東",
[住所] Like "*名古屋*", "東海",
[住所] Like "*大阪*", "近畿",
[住所] Like "*神奈川*", "関東",
[住所] Like "*福岡*", "九州",
True, "その他"
)
Like演算子とワイルドカードを組み合わせることで、あいまい検索(パターンマッチング)にも対応できます。
事例は、住所フィールドに含まれた都道府県をキーワードにして、地方別を分類するものです。
他関数と組み合わせるパターン
Switch(
Nz([売上金額],0) >= 1000000, "Sランク",
Nz([売上金額],0) >= 500000, "Aランク",
Nz([売上金額],0) >= 100000, "Bランク",
True, "Cランク"
)
Nz関数を組み合わせたパターンです。
事例は、売上金額フィールドが未入力(Null値)の場合、0に置き換えたうえで判定を行い、売上金額順位でランク分けをしています。
IIf関数との比較/使い分け
前述のとおり、3つ以上の条件分岐では、IIf関数よりもSwitch関数の使用をおすすめしました。
では実際に、どの程度見た目に違いがあるのか比較してみましょう。
比較には、具体例「基本的なパターン」で使用したコードを用います。
【Switch関数の記載】
Switch([点数]>=90, "A",
[点数]>=80, "B",
[点数]>=70, "C",
[点数]>=60, "D",
True,"E")
【IIf関数の記載】
IIf([点数]>=90, "A",
IIf([点数]>=80, "B",
IIf([点数]>=70, "C",
IIf([点数]>=60, "D",
"E"
))))
ご覧のとおり、Switch関数の方がスッキリしていて読みやすいことが分かります。
一方で、IIf関数をネスト(IIfの中にIIfを入れる)すると、コードが複雑になり、カンマや括弧の対応を間違えやすく、エラーの原因にもなります。
【使い分けのポイント】
| 条件 | おすすめの関数 |
|---|---|
| 条件が少ない(2択など) | IIf関数 |
| 条件が多い(3択以上) | Switch関数 |
ただし、Switch関数を使っても、式が長すぎたり条件が複雑すぎる場合は、可読性の差があまりなくなります。
そのようなときは、Select Caseステートメントやモジュール関数化も検討するとよいでしょう。
まとめ
Accessにおいて、選択/判断に使用する関数やステートメントは数多く用意されています。それだけ「判断」というのはプログラム上大切なわけですが、それだけに、可読性や保守性というものに気を配る必要があります。
Switch関数は、多分岐条件をシンプルに記載することに特化した関数ですので、利用シーンをよく理解したうえで、積極的に使用していきましょう。


