【Access関数】Switch関数の使い方|構文・具体例

入門講習

Switch関数は、”複数条件の判断”をシンプルな式で表すことのできる関数です。2択以上の選択肢になりそうな場合は、この関数の使用を検討してみてください。

本記事では、基本的な構文や具体的な使い方について解説します。

Switch関数とは

Switch関数は、複数の条件を順番に判断して、最初に「True(合致)」となった条件に対応する値を返す関数です。

Accessの条件/選択系関数といえば、IIf関数がまっさきに候補に挙がると思いますが、IIf関数で3択以上の判定を行うためには、IIf関数をネスト(同じ関数を重ねていくこと)する必要があり、とても複雑な式になります。

Switch関数は、「もしAなら〇〇、それ以外でBなら◆◆、それ以外でCなら◎◎」というロジックを、ネストされたIIf関数より簡潔に記述できます。

多分岐条件をスッキリ書きたいときに便利です。

構文

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関数は、多分岐条件をシンプルに記載することに特化した関数ですので、利用シーンをよく理解したうえで、積極的に使用していきましょう。

タイトルとURLをコピーしました