「部署コードを部署名に変換したい」「ランクごとにコメントを振り分けたい」――こんなとき、IF関数をネストして書いていませんか? 条件が3つ、5つと増えるたびにカッコが深くなり、どこが何の条件か追いかけるだけで疲れてしまいますよね。
ExcelのSWITCH関数を使えば、IFのネストは不要です。値と結果のペアを並べるだけで、条件分岐がすっきり1行で書けます。この記事では、SWITCH関数の構文と基本の使い方から、IF・IFS・CHOOSEとの使い分けまでまとめて解説します。エラー対処法や応用テクニックも紹介しますよ。
ExcelのSWITCH関数とは?(完全一致で値を振り分ける関数)
SWITCH関数は、1つの値を複数の候補と照合する関数です。一致した候補に対応する結果を返します。読み方は「スイッチ関数」で、英語の「switch(切り替える)」から来ています。プログラミング言語の switch 文と同じ発想ですね。
たとえば「コードがS01なら営業部、A01なら総務部」のように、完全一致で値を振り分けるのが得意です。
特徴をまとめると、次のとおりです。
- 1つの式(セル)を複数の値と比較できる
- 値と結果をペアで並べるので、IFネストより読みやすい
- 最大126ペアまで指定できる
- 既定値(デフォルト)を最後の引数で指定できる
SWITCH関数が使えるExcelバージョン
SWITCH関数は比較的新しい関数です。Microsoft公式ドキュメントによると、使えるバージョンは以下のとおりです。
| バージョン | 対応状況 |
|---|---|
| Microsoft 365 | 使える |
| Excel 2024 | 使える |
| Excel 2021 | 使える |
| Excel 2019 | 使える |
| Excel 2016以前 | 使えない |
| Excel for the web | 使える |
| Excel for Mac(2019以降) | 使える |
NOTE
Excel 2016以前をお使いの場合は、IFのネストやCHOOSE関数で代替できます。この記事の「使い分け」セクションで詳しく紹介しています。
SWITCH関数はGoogleスプレッドシートでも使えます。スプレッドシートでは最大38ペアという違いはありますが、構文と動作はExcelと同じです。
SWITCH関数の構文と引数
基本構文
=SWITCH(式, 値1, 結果1, [値2, 結果2], …, [既定値])
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 式 | 必須 | 比較対象となるセルや数式 |
| 値1 | 必須 | 式と照合する最初の値 |
| 結果1 | 必須 | 値1と一致したときに返す値 |
| 値2〜値126 | 任意 | 追加の比較値(最大126ペアまで) |
| 結果2〜結果126 | 任意 | 対応する結果 |
| 既定値 | 任意 | どの値にも一致しなかったときの戻り値 |
値と結果は必ずセットで指定します。最大126ペアまで設定できますよ。
既定値は「ペアにならず余った最後の引数」です。省略すると、一致しなかったときに#N/Aエラーになります。「該当なし」などの既定値を入れておくのがおすすめです。
引数の数え方(ペア数の見分け方)
「引数が奇数個か偶数個か」で既定値の有無がわかります。
- 奇数個(例: 式 + 3ペア = 7個): 最後が既定値
- 偶数個(例: 式 + 3ペア = 6個 ではなく、式 + 3ペア × 2 = 7個): 既定値なし
細かい話ですが、引数の数を数えると既定値の漏れをチェックできます。数式を見直すときに使ってみてください。
SWITCH関数の基本的な使い方(コード変換の例)
部署コードを部署名に変換する
部署コードから部署名を表示する例で、基本の流れを見ていきましょう。
サンプルデータ
| A列(部署コード) | B列(部署名) | |
|---|---|---|
| 2行目 | S01 | ←ここに数式を入れる |
| 3行目 | A01 | |
| 4行目 | F01 | |
| 5行目 | X99 |
B2セルに次の数式を入力します。
=SWITCH(A2, "S01","営業部", "A01","総務部", "F01","経理部", "該当なし")
結果
| A列 | B列(結果) | |
|---|---|---|
| 2行目 | S01 | 営業部 |
| 3行目 | A01 | 総務部 |
| 4行目 | F01 | 経理部 |
| 5行目 | X99 | 該当なし |
A2の値「S01」が最初のペア「S01→営業部」に一致するので、「営業部」が返ります。X99はどのペアにも一致しないので、既定値の「該当なし」が表示されますね。
数式の組み立ては「式→値と結果のペア→既定値」の順番で書くだけです。
既定値(デフォルト)を設定する方法
既定値の仕組みをもう少し詳しく見てみましょう。
既定値なしの場合はこうなります。
=SWITCH(A2, "S01","営業部", "A01","総務部")
A2が「F01」なら、どのペアにも一致しません。既定値がないため#N/Aエラーが出ます。
既定値を追加すると、エラーを防げます。
=SWITCH(A2, "S01","営業部", "A01","総務部", "該当なし")
末尾の「該当なし」が既定値です。想定外の値が入ってもエラーにならないので、実務では必ず設定しておきましょう。
数値の一致で振り分ける
SWITCH関数は文字列だけでなく、数値の完全一致にも使えます。たとえばステータスコードで処理状況を表示するパターンです。
=SWITCH(A2, 1,"受付中", 2,"処理中", 3,"完了", 9,"キャンセル", "不明")
数値はダブルクォートで囲まずに書きます。1、2、3のような連番コードを扱うときによく使うパターンです。
IFネストとSWITCH関数の書き換え比較
IF関数のネストが3段を超えたらSWITCHに切り替えるサイン
IF関数のネストが3段を超えると、カッコの対応がわかりにくくなります。完全一致の条件分岐なら、SWITCH関数への切り替えを検討してみてください。
目安は次のとおりです。
- 2〜3段のIFネスト: そのままでもOK
- 4段以上のIFネスト: SWITCH関数にすると読みやすい
- 5段以上: SWITCH関数に書き換えたほうが保守しやすい
書き換え例:5段IFネスト → SWITCH関数1行
5つの部署コードを判定する例で比べてみましょう。
Before(IFネスト5段):
=IF(A2="S01","営業部",IF(A2="A01","総務部",IF(A2="F01","経理部",IF(A2="H01","人事部",IF(A2="M01","マーケ部","該当なし")))))
After(SWITCH関数):
=SWITCH(A2, "S01","営業部", "A01","総務部", "F01","経理部", "H01","人事部", "M01","マーケ部", "該当なし")
IFネストでは「A2=」を5回書いて、閉じカッコも5つ必要です。SWITCH関数なら式は1回、カッコも1組で済みます。条件が増えるほど差が広がりますよ。
読み手の負担が減る3つの理由
SWITCH関数に書き換えると、単にコードが短くなるだけではありません。読み手の負担も3つのポイントで減らせます。
- 式を1回しか書かない: 「A2」の値を何と比べているかが一目でわかります
- カッコのネストがない: 閉じカッコの位置で迷うことがなくなります
- 値と結果がペアで並ぶ: 「このコードならこの部署」が視覚的に追いやすいです
数式を修正する人が自分以外でも、SWITCH版のほうが引き継ぎやすいですね。
SWITCH・IFS・IF・CHOOSEの使い分け
完全一致ならSWITCH、不等号条件ならIFS
SWITCH関数は完全一致(=)しか判定できません。「80点以上ならA」のような範囲条件には対応できないので、その場合はIFS関数を使いましょう。
| 比較項目 | SWITCH | IFS |
|---|---|---|
| 判定方式 | 完全一致のみ | 条件式を自由に記述 |
| 範囲比較(>=など) | 不可 | 可 |
| 既定値の指定 | 最後の引数 | TRUE条件で代用 |
| 向いている場面 | コード→名称の変換 | 範囲・大小の条件分岐 |
連番・インデックスで選ぶならCHOOSE
CHOOSE関数は、整数インデックス(1, 2, 3…)で結果を選ぶ関数です。SWITCH関数との違いは次のとおりです。
- CHOOSE: インデックスは1から始まる連続整数のみ
- SWITCH: 任意の値(文字列・数値・日付など)で比較できる
連番で管理しているデータならCHOOSE、それ以外はSWITCHが便利です。
使い分けフロー(判断チャート)
条件分岐の関数選びに迷ったら、次の順番で判断してみてください。
- 完全一致か? → はい → SWITCH関数
- 範囲や大小を比較するか? → はい → IFS関数
- 連続整数のインデックスか? → はい → CHOOSE関数
- 条件が2〜3個程度か? → はい → IF関数のネスト
条件分岐の関数選びについては、IF・IFS・IFERROR・IFNAの使い分けの記事でさらに詳しくまとめています。
ひと目でわかる4関数の比較表
| 関数 | 判定方式 | 主な用途 | 既定値 |
|---|---|---|---|
| SWITCH | 完全一致 | コード→名称変換 | 最後の引数 |
| IFS | 条件式 | 範囲・大小比較 | TRUE条件で代用 |
| IF | 2分岐 | シンプルな二択 | FALSE側で指定 |
| CHOOSE | 連番 | 1〜Nのインデックス | なし(IFERRORで補う) |
このマトリクスを頭に入れておくと、数式を書く前に関数選びで迷わなくなりますよ。
SWITCH関数のエラーと対処法
#N/A:既定値を忘れると一致しない値でエラーに
原因: どの値にも一致せず、既定値も未指定の場合に#N/Aが出ます。
対処法: 最後の引数に既定値を追加しましょう。
=SWITCH(A2, "S01","営業部", "A01","総務部", "該当なし")
末尾の「該当なし」が既定値です。ペアにならず余った引数が既定値として扱われます。
SWITCH関数で最もよくあるエラーなので、既定値は必ず入れるようにしてみてください。
#NAME?:Excel 2016以前では使えない
原因: SWITCH関数はExcel 2019以降の関数です。Excel 2016以前で入力すると#NAME?エラーになります。
対処法: バージョンを確認するには「ファイル → アカウント」を開きます。Excel 2016以前の場合は、IFのネストで代替しましょう。
=IF(A2="S01","営業部",IF(A2="A01","総務部",IF(A2="F01","経理部","該当なし")))
エラーをまとめて防ぎたいときは、IFERROR関数で囲む方法もあります。
=IFERROR(SWITCH(A2, "S01","営業部", "A01","総務部"), "入力値を確認してください")
#VALUE!:引数の型が合っていない
原因: 式の結果と値のデータ型が一致しないときに出る場合があります。たとえば式が数値を返すのに値を文字列で書いている、という不整合です。
対処法: 式と値のデータ型を揃えましょう。数値どうしで比較するか、TEXT関数や&""で文字列化して揃える方法が確実です。
=SWITCH(TEXT(A2,"0"), "1","受付中", "2","処理中", "該当なし")
A2が数値でも文字列でもブレない書き方です。入力値の型が不安定なときの保険として覚えておくと便利ですよ。
よくある誤解:「SWITCHで範囲比較」はできない
SWITCH関数を「80点以上ならA、70点以上ならB」のように使おうとして、うまくいかずハマるパターンがあります。SWITCH関数は完全一致しか判定できません。
範囲条件はIFS関数の出番です。それでもSWITCHで書きたい場合は、後述の「TRUEトリック」を使います。
SWITCH関数の応用テクニック
WEEKDAY関数と組み合わせて曜日名を表示する
WEEKDAY関数は曜日を1〜7の数字で返します。SWITCH関数と組み合わせれば、日本語の曜日名に変換できます。
=SWITCH(WEEKDAY(A2), 1,"日", 2,"月", 3,"火", 4,"水", 5,"木", 6,"金", 7,"土")
WEEKDAY関数の戻り値(1=日曜〜7=土曜)をそのまま値として並べるだけです。曜日のように候補が決まっている場面にはピッタリですよ。
MONTH関数で月別の区分を作る
同じ発想で、月を四半期に変換するパターンも書けます。
=SWITCH(MONTH(A2), 1,"Q4", 2,"Q4", 3,"Q4", 4,"Q1", 5,"Q1", 6,"Q1", 7,"Q2", 8,"Q2", 9,"Q2", 10,"Q3", 11,"Q3", 12,"Q3")
日本の会計年度(4月始まり)で四半期を割り当てる例です。数式は長めですが、条件の対応が明確で読みやすいですよね。
SWITCH(TRUE,…)で範囲条件を処理する裏ワザ
SWITCH関数は完全一致が基本ですが、TRUEトリックを使うと範囲条件も処理できます。
=SWITCH(TRUE, A2>=90,"A評価", A2>=70,"B評価", A2>=50,"C評価", "D評価")
式にTRUEを指定して、各値の位置に条件式を書きます。上から順に評価され、最初にTRUEになった結果が返ります。
ちょっとむずかしく見えますが、やっていることはシンプルです。「どの条件がTRUEか?」を上から順にチェックしているだけですね。
ただし、範囲条件の本来の用途はIFS関数です。TRUEトリックは「裏ワザ」として知っておく程度でOKですよ。
SWITCHとVLOOKUPの使い分け基準
コード変換ならVLOOKUP関数でもできます。どちらを使うか迷ったら、対応の件数で判断してみてください。
| 基準 | SWITCH関数 | VLOOKUP関数 |
|---|---|---|
| 対応の件数 | 5〜10件程度に最適 | 大量データに最適 |
| 対応の管理方法 | 数式内に埋め込む | 別テーブルで管理 |
| メンテナンス性 | 件数が少なければ楽 | テーブル更新で対応 |
| 向いている場面 | 固定の少数コード変換 | マスタテーブルとの照合 |
対応が5〜10件で変更が少ないならSWITCH、それ以上ならVLOOKUPが向いています。
データの入力規則とセットで使う
SWITCH関数は「想定した値しか入ってこない列」と相性がよい関数です。データの入力規則(リスト選択)とセットで使うと、未知の値が入ることを防げます。
- 入力規則で「S01, A01, F01, H01, M01」のリストを設定
- SWITCHで各コードの部署名に変換
- 既定値「該当なし」は入力規則の例外対策として保険で残す
入力規則とSWITCHを組み合わせると、入力ミスと数式エラーをダブルで防げますね。
SWITCH関数の実務でよく使うパターン集
よくある業務シーンでの使い方を4つ紹介します。テンプレートとしてコピペで使ってください。
パターン1:ステータスコードの日本語化
業務システムから出力したCSVなどで、ステータスが英語コードのまま入っていることがあります。
=SWITCH(A2, "OPEN","受付中", "WIP","処理中", "DONE","完了", "CANCEL","キャンセル", A2)
最後の既定値をA2にすることで、未知のコードはそのまま表示されます。データの確認用に一時的に使うときに便利ですよ。
パターン2:優先度ランクのアイコン表示
優先度を1〜3で管理しているとき、視覚的にわかりやすく変換できます。
=SWITCH(A2, 1,"★★★(高)", 2,"★★(中)", 3,"★(低)", "未設定")
ダッシュボードやレポートで、数字より一目で判別しやすくなります。
パターン3:エラー判定の分類
IFERROR関数と組み合わせて、エラーの種類別に対応することもできます。
=IFERROR(VLOOKUP(A2,テーブル,2,FALSE), SWITCH(TRUE, A2="","値未入力", LEN(A2)<3,"コード桁数不足", "マスタ未登録"))
VLOOKUPがエラーになったときだけ、原因を分類して表示するパターンです。チェック作業のフィードバックに使えますよ。
パターン4:アンケート選択肢の集計用変換
5段階評価を数値スコアに変換するパターンです。
=SWITCH(A2, "非常に満足",5, "満足",4, "普通",3, "不満",2, "非常に不満",1, 0)
アンケートの文字列回答を数値化できるので、このあと平均や分布の集計に使えます。既定値0は未回答扱いです。
よくある質問(FAQ)
SWITCH関数は大文字小文字を区別しますか?
SWITCH関数は大文字小文字を区別しません。「S01」と「s01」は同じ値として扱われます。大文字小文字を厳密に区別したい場合は、EXACT関数と組み合わせた別の書き方が必要です。
=SWITCH(TRUE, EXACT(A2,"S01"),"営業部", EXACT(A2,"s01"),"営業部(小文字)", "該当なし")
ワイルドカード(*や?)は使えますか?
SWITCH関数はワイルドカードに対応していません。値はあくまで完全一致で比較されます。部分一致で振り分けたいときは、IF関数とSEARCH関数の組み合わせなどを検討してください。
配列を返すことはできますか?
1つの値に対して1つの結果しか返せません。ただし、スピル対応のExcel(Microsoft 365・Excel 2021以降)なら話が変わります。式の部分に配列を入れれば、結果もスピルして並びます。
=SWITCH(A2:A5, "S01","営業部", "A01","総務部", "該当なし")
縦方向の範囲A2:A5をSWITCHで一括変換する書き方です。
最大何個のペアを書けますか?
Excel版は最大126ペアまで指定できます。実務では20ペアを超えるなら、マスタテーブル+VLOOKUP関数への切り替えを検討するのがおすすめですよ。
Googleスプレッドシートでも同じ構文で使えますか?
構文は同じですが、Googleスプレッドシート版のSWITCH関数は最大38ペアという違いがあります。また、スプレッドシートでは配列処理の挙動が少し異なるので、大量データで使うときはテストしてから本番投入してください。
まとめ
ExcelのSWITCH関数の使い方を紹介しました。最後にポイントを整理しましょう。
| 項目 | 内容 |
|---|---|
| 機能 | 1つの値を複数の候補と照合して結果を返す |
| 構文 | =SWITCH(式, 値1, 結果1, …, [既定値]) |
| 最大ペア数 | 126ペア(Googleスプレッドシートは38ペア) |
| 対応バージョン | Excel 2019 / 2021 / 2024 / Microsoft 365 |
| 得意な場面 | コード→名称の変換(完全一致の分岐) |
| 苦手な場面 | 範囲条件(>=など)→ IFS関数を使う |
SWITCH関数は、IFのネストを置き換えるだけで数式がグッと読みやすくなります。完全一致の分岐が出てきたら、ぜひ試してみてください。既定値の設定と、他関数との使い分けを意識するのが使いこなしのコツですよ。
条件分岐の関数をもっと深く知りたい方は、IF・IFS・IFERROR・IFNAの使い分けもあわせてご覧ください。
