SWITCHは、1つの値を複数のパターンと突き合わせて、一致したものに対応する値を返す関数です。
「東京なら首都圏、大阪なら関西、…」のような値の言い換えに特化しています。IF のネストや IFS でも書けますが、同じセルを何度も書かずに済むぶん短くなります。
書式
=SWITCH(対象, パターン1, 値1, パターン2, 値2, ..., [既定値])
| 引数 | 内容 |
|---|---|
| 対象 | 判定したい値・セル |
| パターン/値 | ペアで並べる。いくつでも増やせる |
| 既定値 | どれにも一致しなかったときの値。最後に単独で置く |
基本の使い方
=SWITCH(A2, "東京", "首都圏", "大阪", "関西", "福岡", "九州", "その他")
A2が「大阪」なら「関西」、リストに無い値なら「その他」が返ります。
最後の "その他" はペアになっていない単独の引数です。引数の数が偶数なら既定値あり、奇数なら既定値なし、と考えると分かりやすくなります。
IFSとの違い
同じ処理を並べます。
IFS
=IFS(A2="東京","首都圏", A2="大阪","関西", A2="福岡","九州", TRUE,"その他")
SWITCH
=SWITCH(A2, "東京","首都圏", "大阪","関西", "福岡","九州", "その他")
SWITCHは A2= の繰り返しが消えます。項目が20個あれば、この差は大きくなります。
使い分けの基準はシンプルです。
SWITCHは完全一致しか判定できません。「80点以上なら」のような範囲判定はIFSの領分です。
既定値を省略するとどうなるか
既定値を書かずに一致するものが無いと、#N/A が返ります。
=SWITCH(A2, "東京","首都圏", "大阪","関西")
A2が「札幌」なら #N/A です。これを意図的に使う場合もありますが、通常は既定値を書いておくほうが安全です。想定外の値が入ったことに気づけないよりは、「その他」として扱うか、明示的に「要確認」と出すほうが運用しやすくなります。
=SWITCH(A2, "東京","首都圏", "大阪","関西", "要確認")
実用例
コードを名称に変換する
=SWITCH(A2, 1,"未処理", 2,"処理中", 3,"完了", 9,"キャンセル", "不明")
数値コードでも文字列でも同じように書けます。
曜日番号を曜日名にする
=SWITCH(WEEKDAY(A2), 1,"日", 2,"月", 3,"火", 4,"水", 5,"木", 6,"金", 7,"土")
WEEKDAY は1(日曜)〜7(土曜)を返すので、そのまま振り分けられます。
複数の値を同じ結果にまとめる
同じ結果になるパターンは、素直に繰り返して書きます。
=SWITCH(A2, "東京","首都圏", "神奈川","首都圏", "千葉","首都圏", "埼玉","首都圏", "その他")
繰り返しが多くなるなら、別シートに対応表を作って XLOOKUP で引くほうが保守しやすくなります。
=XLOOKUP(A2, 対応表!A:A, 対応表!B:B, "その他")
分類が10を超えたら表に移す、というのが実務的な目安です。数式を触らずに分類を追加できます。
注意点
完全一致のみです。 大文字小文字は区別されませんが、前後のスペースは区別されます。"東京 " は "東京" と一致しません。外部から取り込んだデータでは TRIM を挟むと安全です。
=SWITCH(TRIM(A2), "東京","首都圏", "その他")
数値と文字列は別物です。 1 と "1" は一致しません。
パターンに範囲や条件式は書けません。 ">80" のような書き方は文字列として扱われ、一致しません。範囲判定は IFS を使ってください。
TRUEを使った裏技
対象に TRUE を置くと、パターンの側に条件式を書けます。
=SWITCH(TRUE, A2>=90,"A", A2>=80,"B", A2>=70,"C", "D")
「条件式の結果が TRUE と一致するもの」を上から探す、という理屈です。動きますが、読み手が意図を掴みにくいので、素直に IFS を使うほうが親切です。
まとめ
- - 書式は
=SWITCH(対象, パターン1, 値1, ..., 既定値) - - 値の一致による振り分けに特化
- - 比較演算子を含む判定は IFS
- - 既定値は最後に単独で置く。省略すると
#N/A - - 分類が10を超えたら表+XLOOKUP
コメントを残す