「部署コードを部署名に変換したい」「ステータスコードに応じてラベルを出し分けたい」。スプレッドシートの一覧表でよくある作業ですよね。こんなときに IF関数 のネストで書くと、条件が増えるたびに括弧が深くなって、後から修正するのも一苦労です。
そんなときに便利なのが SWITCH関数 です。判定したい値と、それに対する結果をペアで並べていくだけで、IFネストよりずっと読みやすいケース分岐が書けます。プログラミングのswitch文と同じ発想なので、エンジニア出身の方には馴染みのある関数ですね。
この記事ではSWITCH関数の基本構文から、部署コード変換・曜日名変換・進捗ラベル表示・ARRAYFORMULAによる一括判定など、実務でそのまま使える7パターンを早見表付きで紹介します。#N/Aや#VALUE!エラーの対処法、IF関数・IFS関数・CHOOSE関数との使い分けまで整理しますよ。
スプレッドシートのSWITCH関数とは?値の完全一致でケース分岐する関数
SWITCH関数(読み方: スイッチ関数)は、1つの値を複数の候補と照合し、最初に一致した候補に対応する結果を返す関数です。関数名はプログラミング言語のswitch文に由来していて、「ケース分岐」という考え方をそのまま関数化したものですね。
たとえば「部署コードがS01なら営業部、A01なら総務部、F01なら経理部」のように、値と結果のペアを並べていくだけで分岐が完成します。IF関数のネストのように IF(... IF(... IF(...))) と入れ子になることがないので、条件が5つ・10個と増えても式が読みやすいままです。
SWITCH関数で何ができる?
SWITCH関数が活躍するのは、おもに次のような場面です。
- 部署コード・支店コード・商品コードなどの コード値を表示用のラベルに変換 したいとき
- 申請ステータス(「承認」「却下」「保留」)に応じて コメントやアイコンを出し分け たいとき
- WEEKDAY関数 の結果(1〜7)を 日本語の曜日名に変換 したいとき
- タスクの進捗コード(0〜4)を 「未着手」「進行中」などの日本語ラベル に変換したいとき
- 候補が10個以下で固定されていて、わざわざVLOOKUP関数で別テーブルを作るほどでもないとき
NOTE: SWITCH関数はGoogleスプレッドシートの全バージョンで使えます。Excelでは2019以降またはMicrosoft 365で対応しています。古いExcel(2016以前)と互換性が必要なファイルでは使えないので、その場合はIFネストやVLOOKUPで代用してください。Excel版の詳しい解説は ExcelのSWITCH関数の使い方 もあわせてご覧ください。
SWITCH関数の構文と引数
基本構文
=SWITCH(式, 値1, 結果1, [値2, 結果2], ..., [既定値])
最初に判定したい「式(セル参照や数式)」を1つ書き、その後に 「値, 結果」のペア を並べていきます。最後の引数を1つだけ余らせると、それが「どの候補にも一致しなかったとき」の 既定値 として扱われます。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 式 | 必須 | 比較対象となるセル参照、数値、文字列、または数式 |
| 値1 | 必須 | 式と照合する最初の候補 |
| 結果1 | 必須 | 値1と一致したときに返す値 |
| 値2〜値126 | 任意 | 追加の候補(最大126ペアまで指定可) |
| 結果2〜結果126 | 任意 | 各値に対応する結果 |
| 既定値 | 任意 | どの候補にも一致しなかったときに返す値(省略可だが、省略すると#N/Aエラー) |
値と結果は必ずセットで指定します。引数を後ろから数えて 奇数番目 が余ったときに、それが既定値として扱われる仕組みです。文字列を値にする場合は "S01" のようにダブルクォーテーションで囲み、数値の場合は囲みません。
TIP: 既定値は省略可能ですが、省略すると一致しなかったときに #N/A エラーが返ります。実務では「該当なし」「未分類」など意味のある文字列を入れておくと、後から見たときにも安全です。
SWITCH関数の動作イメージ早見表
| 数式の例 | A2の値 | 戻り値 |
|---|---|---|
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし") | “S01” | 営業部 |
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし") | “A01” | 総務部 |
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし") | “X99” | 該当なし |
=SWITCH(A2, "S01", "営業部", "A01", "総務部") | “X99” | #N/A(既定値なし) |
=SWITCH(A2, 1, "S", 2, "A", 3, "B", "未評価") | 2 | A |
=SWITCH(A2, 1, "S", 2, "A", 3, "B", "未評価") | 99 | 未評価 |
上から順に値を照合していき、最初に一致した結果を返したら処理は終了 します。同じ値を複数回書いても、最初に書いた結果しか返らない点に注意してください。
SWITCH関数の基本的な使い方
文字列のコードでケース分岐する
実務でいちばん多いパターンです。A列に部署コード、B列に変換した部署名を表示するケースで見てみましょう。
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "F01", "経理部", "該当なし")
A2が「S01」なら「営業部」、「A01」なら「総務部」、「F01」なら「経理部」、それ以外なら「該当なし」が返ります。IF関数のネストで同じことを書くと =IF(A2="S01", "営業部", IF(A2="A01", "総務部", IF(A2="F01", "経理部", "該当なし"))) になりますが、SWITCH関数なら「A2=」を3回も繰り返さずに済むのがメリットです。
数値のコードでケース分岐する
評価ランク(1〜4)を S/A/B/C のラベルに変換するパターンです。数値の場合は値をダブルクォーテーションで囲む必要はありません。
=SWITCH(B2, 1, "S", 2, "A", 3, "B", 4, "C", "未評価")
B2が「1」なら「S」、「3」なら「B」、範囲外(0や5など)なら「未評価」が返ります。コードが連続した整数(1, 2, 3, …)なら CHOOSE関数 のほうが短く書けますが、コードが「1, 3, 5」のように飛び飛びだったり、「0=未着手」のように0始まりだったりする場合はSWITCH関数の出番です。
数式の結果に対してケース分岐する
引数の「式」には、セル参照だけでなく数式そのものを書くこともできます。たとえばWEEKDAY関数の結果を日本語の曜日に変換するパターンです。
=SWITCH(WEEKDAY(A2), 1, "日", 2, "月", 3, "火", 4, "水", 5, "木", 6, "金", 7, "土")
WEEKDAY(A2)は1〜7の数値を返すので、その結果を直接SWITCH関数の「式」に渡しています。中間セルに曜日番号を表示する必要がないので、列が増えずスッキリします。
基本パターンの早見表
| 数式 | 用途 | 既定値の扱い |
|---|---|---|
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし") | 文字列コード→ラベル変換 | “該当なし” |
=SWITCH(B2, 1, "S", 2, "A", 3, "B", 4, "C", "未評価") | 数値コード→ラベル変換 | “未評価” |
=SWITCH(WEEKDAY(A2), 1, "日", 2, "月", ..., 7, "土") | 数式の結果→ラベル変換 | 省略(1〜7で全パターン網羅) |
=SWITCH(TRUE, A2>=80, "A", A2>=60, "B", TRUE, "C") | 範囲判定の代用(IFSのほうが推奨) | 最後のTRUE |
実務で使えるSWITCH関数の活用パターン7選
ここからは、実務でそのまま使えるSWITCH関数の活用パターンを7つ紹介します。「コード変換」「ラベル変換」「曜日変換」「複合条件」「配列対応」など、よくある場面を網羅しているので、自分のケースに近いものから試してみてください。
パターン1: 部署コードから部署名を自動変換する(総務・人事向け)
社員データの部署コードを、報告書に貼るための読みやすい部署名に変換する場面です。A列に社員名、B列に部署コードが入っているとします。
=SWITCH(B2, "S01", "営業部", "A01", "総務部", "F01", "経理部", "H01", "人事部", "IT1", "情報システム部", "不明")
候補が10個以下の場合は、SWITCH関数が最もシンプルです。マスタテーブルを別シートに作らずに済むので、軽い変換ならこれで十分ですよ。
TIP: 部署コードが20個・30個と増えてくる場合は、別シートにマスタテーブルを作って VLOOKUP関数 で参照したほうがメンテしやすくなります。「マスタを更新するときに数式を書き換えるかどうか」が分かれ目です。
パターン2: 申請ステータスを処理コメントに変換する
申請管理シートで、ステータス(「承認」「却下」「保留」など)に応じたコメントを表示するパターンです。
=SWITCH(B2, "承認", "処理完了", "却下", "差し戻し対応", "保留", "確認待ち", "取下げ", "対応不要", "ステータス不明")
B2が「承認」なら「処理完了」、「保留」なら「確認待ち」が返ります。担当者がコメント欄に書く文言を統一できるので、後から検索したり集計したりするのもラクになります。
パターン3: 曜日番号を日本語の曜日名に変換する
WEEKDAY関数 の結果を日本語の曜日に変換する定番パターンです。A列に日付が入っているとします。
=SWITCH(WEEKDAY(A2), 1, "日", 2, "月", 3, "火", 4, "水", 5, "木", 6, "金", 7, "土")
WEEKDAY関数の戻り値は1=日曜〜7=土曜なので、それぞれに対応する日本語を並べるだけです。「曜日(営業日/休日)」を出し分けるなら、次のように2パターンにまとめることもできます。
=SWITCH(WEEKDAY(A2, 2), 6, "休日", 7, "休日", "営業日")
WEEKDAY関数の第2引数に2を指定すると「月曜=1〜日曜=7」になるので、6(土)と7(日)だけ「休日」、それ以外はすべて既定値の「営業日」が返ります。
TIP: 曜日変換は TEXT関数 で =TEXT(A2, "ddd")(→月、火…)と書く方法もあります。SWITCH関数のメリットは 任意のラベル(例: 「Mon」「Tuesday」「定休日」)に自由に変換できる こと。TEXT関数では「月」を「Mon」に変えられないので、表記をコントロールしたい場面ではSWITCH関数を選びましょう。
パターン4: 進捗ステータスコードを日本語ラベルに変換する(タスク管理向け)
タスク管理シートで、数値の進捗コード(0〜4)を読みやすいラベルに変換する例です。
=SWITCH(A2, 0, "未着手", 1, "進行中", 2, "レビュー中", 3, "完了", 4, "差し戻し", "不明")
数値コードの場合もダブルクォーテーションは不要です。コードを直接見るよりラベル表示にすると、一目で状況がわかりますよね。スプレッドシートで条件付き書式と組み合わせると、ラベルに応じてセルの色を変えることもできます。
パターン5: 範囲条件の代用としてTRUEパターンで使う(IFSの代わり)
SWITCH関数は本来 完全一致しか判定できません が、第1引数にTRUEを指定する裏ワザを使うと、範囲条件(80点以上ならAなど)も書けます。
=SWITCH(TRUE, A2>=80, "A", A2>=60, "B", A2>=40, "C", "D")
仕組みはこうです。
- 第1引数を
TRUEにする - 値の位置に
A2>=80のような比較式を書く(結果はTRUE/FALSEになる) - TRUEと一致した最初の結果が返る
ただし、このパターンは IFS関数 のほうが意図が伝わりやすいので、範囲判定なら基本的にはIFS関数を使うことをおすすめします。
=IFS(A2>=80, "A", A2>=60, "B", A2>=40, "C", TRUE, "D")
このIFS版とほぼ同じ意味ですね。SWITCH関数のTRUEパターンを使うのは「マクロ内などでIFS関数が使えない環境」「すでにSWITCH関数で書き始めていて統一したい」場合に限定しましょう。
パターン6: 既定値で「該当なし」「未分類」を必ず返すようにする
SWITCH関数の 既定値は必ず設定しておく のがおすすめです。理由は、未登録のコードが入力されたときに #N/A エラーを返さず、データの異常に気付きやすくするためです。
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし")
「該当なし」の行が一覧表に並べば、コードの入力ミスや新規コードの追加漏れがすぐ発見できます。エラー値(#N/A)だと、フィルタや並べ替えで除外されたり、SUM関数の対象範囲でエラーが伝播したりして扱いづらいんですよね。
TIP: 既定値に空文字""を入れると「何も表示しない」設定にできます。=SWITCH(A2, "S01", "営業部", "A01", "総務部", "") のように書けば、未登録コードは空欄になります。
パターン7: ARRAYFORMULAで列全体を一括変換する(Sheets限定)
スプレッドシート特有の機能、ARRAYFORMULA を組み合わせて列全体を一括判定するパターンです。残念ながら SWITCH関数は直接ARRAYFORMULA化できません (配列を渡しても1セル分の結果しか返らないため)。代わりに IFS関数 を使います。
=ARRAYFORMULA(IFS(B2:B100="", "", B2:B100="S01", "営業部", B2:B100="A01", "総務部", TRUE, "該当なし"))
B2:B100="" で空白行は空白のまま残し、データがある行だけラベル変換しています。1つの数式で列全体に対応するので、フィルダウン不要・データ追加にも自動対応する設計です。
「SWITCH関数で書きたいけれど配列対応したい」場合は、思い切ってIFS関数に書き換えるのが現実的な解です。SWITCH関数は1セル単位の処理が前提、と覚えておきましょう。
SWITCH関数のよくあるエラーと対処法
SWITCH関数は構文がシンプルな分、エラーパターンも限定的です。代表的なものを早見表でまとめます。
| エラー・現象 | 原因 | 対処法 |
|---|---|---|
| #N/A | 値が候補に一致せず、既定値も省略している | 最後の引数に「該当なし」など既定値を追加する |
| #VALUE! | 引数の数が不正(値だけあって結果がない) | 値と結果がペアになっているか確認する |
| #NAME? | 関数名のスペルミス(SWICH・SWHICHなど) | =SWITCH と正しく入力する |
| #ERROR! | カンマの数が合わない・カッコ忘れ | 引数の区切りとカッコの対応をチェック |
| 期待と違う結果が返る | 全角/半角の不一致(”S01″と”S01”) | ASC関数で半角に統一してから判定 |
| 期待と違う結果が返る | 文字列と数値の混在(”1″と1) | 比較対象の型を揃える |
#N/Aエラー(一致する値がない)の対処法
SWITCH関数でいちばん多いエラーです。式の値がどの候補にも一致せず、既定値も指定されていないときに発生します。
=SWITCH(A2, "S01", "営業部", "A01", "総務部")
A2が「F01」の場合、一致する候補がないため #N/A エラーになります。対処法は最後に既定値を追加する だけです。
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "該当なし")
既存のSWITCH関数のエラーを後から隠したいだけなら、IFERROR関数 で囲む方法もあります。
=IFERROR(SWITCH(A2, "S01", "営業部", "A01", "総務部"), "該当なし")
ただし、はじめからSWITCH関数の既定値を設定するほうがシンプルで読みやすいので、IFERRORは応急処置と考えましょう。
#VALUE!エラー(引数が不正)の対処法
引数の数が不足している場合に発生します。値だけを指定して、対応する結果を書き忘れるケースが典型です。
=SWITCH(A2, "S01")
この式では値1(”S01″)に対応する結果1がないためエラーになります。「値と結果はペア」というルールを意識して、引数を1つずつ数えながら書きましょう。
全角・半角の不一致に注意
SWITCH関数の値の照合は 大文字と小文字を区別しません(「abc」と「ABC」は同じと判定)が、全角と半角は区別します(「S01」と「S01」は別物)。データの表記ゆれがある場合は、事前にASC関数で半角に統一しておくと安心です。
=SWITCH(ASC(A2), "S01", "営業部", "A01", "総務部", "該当なし")
ASC(A2)で全角英数字を半角に変換してから判定するので、入力時のばらつきを吸収できます。
文字列と数値の混在に注意
数値の「1」と文字列の「”1″」は別物として扱われます。コード列に文字列で「1」が入力されていると、数値の1では一致しません。
=SWITCH(A2, 1, "S", 2, "A", "未評価")
A2が文字列の「”1″」だと、上の式では「未評価」が返ります。セルの表示形式が「文字列」になっている場合は、=SWITCH(VALUE(A2), 1, "S", ...) のように VALUE関数 で数値に変換してから判定するか、判定する値も文字列で揃えて =SWITCH(A2, "1", "S", "2", "A", ...) と書きます。
SWITCH関数と似た関数の使い分け
ケース分岐や条件判定に使える関数は他にもあります。それぞれの特徴を比較して、場面に応じて使い分けましょう。
| 関数 | 判定方式 | 範囲条件 | 既定値 | 向いている場面 |
|---|---|---|---|---|
| SWITCH | 完全一致 | 不可 | 最後の引数 | コード→ラベル変換(候補10個以下) |
| IF(ネスト) | 自由な条件式 | 可 | 最後のELSE | 条件1〜2個の単純な分岐 |
| IFS | 自由な条件式 | 可 | TRUE+値で代用 | 範囲条件(80点以上ならAなど) |
| CHOOSE | 連続整数のインデックス | 不可 | なし(#VALUE!) | 連番(1,2,3…)→値の変換 |
| VLOOKUP | 完全一致/近似一致 | 近似なら可 | 別途設定 | 候補10個超のマスタ参照 |
IFネスト→SWITCH関数への書き換え(Before/After)
部署コードを3種類で判定する場合を見比べてみましょう。
Before(IFネスト):
=IF(A2="S01", "営業部", IF(A2="A01", "総務部", IF(A2="F01", "経理部", "該当なし")))
After(SWITCH関数):
=SWITCH(A2, "S01", "営業部", "A01", "総務部", "F01", "経理部", "該当なし")
IFネストでは A2= を3回繰り返していますが、SWITCH関数では1回で済みます。条件が増えるほど、この差は大きくなりますよ。読み手も「これは値の照合だな」と一目で意図が掴めるのがメリットです。
SWITCH関数とIFS関数の使い分け
SWITCH関数は完全一致専用、IFS関数は自由な条件式が書けます。
- 値の完全一致で振り分け → SWITCH関数
>=<などの範囲条件で振り分け → IFS関数- 条件式を細かくカスタマイズ → IFS関数
たとえば「80点以上ならA、60点以上ならB...」のような範囲判定にはSWITCH関数は不向きです。IFS関数を使いましょう。
=IFS(B2>=80, "A", B2>=60, "B", B2>=40, "C", TRUE, "D")
逆に「コードが完全に一致するかどうか」を判定するなら、SWITCH関数のほうが意図が明確に伝わります。
SWITCH関数とCHOOSE関数の使い分け
CHOOSE関数 は 連続した整数(1, 2, 3, ...) をインデックスとして値を返す関数です。
=CHOOSE(B2, "S", "A", "B", "C")
B2が1なら"S"、2なら"A"、3なら"B"、4なら"C"が返ります。値が1から始まる連番なら、こちらのほうが短く書けます。
ただし、CHOOSE関数は次のケースに弱いです。
- 値が 0始まり(CHOOSEは1以上が必要)
- 値が 飛び飛び(1, 3, 5など)
- 値が 文字列(CHOOSEは数値のみ)
- 既定値が設定できない (範囲外は
#VALUE!エラー)
これらに該当する場合はSWITCH関数を使いましょう。「コードがそのまま連番ならCHOOSE、そうでなければSWITCH」と覚えておくとラクです。
SWITCH関数とVLOOKUP関数の使い分け
候補が10個を超えてくると、SWITCH関数の式は長くなってメンテしづらくなります。そんなときは別シートにマスタテーブルを作って VLOOKUP関数 で参照したほうが扱いやすいです。
- 候補10個以下・固定 → SWITCH関数(マスタ不要、式に直接書ける)
- 候補10個超・変動あり → VLOOKUP関数(マスタ更新で対応可能)
- 複数列を参照したい → VLOOKUP関数やQUERY関数
部署マスタのように「部署コード」「部署名」「部署長名」「所在地」のように複数列ある情報を扱うなら、SWITCH関数では対応できません。素直にマスタテーブル+VLOOKUPを使いましょう。
SWITCH関数のよくある質問(FAQ)
Q1. SWITCH関数とIF関数のネスト、どちらを使うべき?
A. 「値の完全一致で振り分ける」場合は、SWITCH関数のほうが読みやすいです。IF関数のネストは、条件が >= < などの範囲判定や、複数条件の組み合わせ(AND/OR)を含む場合に使います。値の照合だけなら迷わずSWITCH関数を選びましょう。
Q2. SWITCH関数とIFS関数の違いは何?
A. SWITCH関数は 1つの式と複数の候補値を完全一致で照合 します。IFS関数は 複数の条件式を順番に評価 します。「部署コードならSWITCH」「点数の範囲判定ならIFS」と覚えると使い分けやすいです。詳しくは スプレッドシートのIFS関数の使い方 もご覧ください。
Q3. SWITCH関数で範囲条件(80点以上ならAなど)を書ける?
A. 第1引数に TRUE を指定すれば書けますが、可読性の観点からは IFS関数 のほうが推奨です。=IFS(A2>=80, "A", A2>=60, "B", TRUE, "C") のように書いたほうが意図が伝わります。
Q4. SWITCH関数の既定値を省略するとどうなる?
A. どの値にも一致しないと #N/A エラーが返ります。実務では「該当なし」「未分類」「空文字""」など、意味のある既定値を設定しておくのがおすすめです。
Q5. SWITCH関数をARRAYFORMULAで列全体に適用したい
A. SWITCH関数は配列引数に対応していないため、ARRAYFORMULAでは1セル分しか結果が返りません。列全体に適用したい場合は IFS関数 に書き換えてください。例: =ARRAYFORMULA(IFS(A2:A100="", "", A2:A100="S01", "営業部", TRUE, "該当なし"))
Q6. SWITCH関数は古いExcelでも使える?
A. Excel 2019以降またはMicrosoft 365でのみ使えます。Excel 2016以前と互換性が必要なファイルでは、IFネストかVLOOKUP関数で代用してください。
Q7. SWITCH関数で値を大文字・小文字区別して判定したい
A. SWITCH関数は値の照合で大文字・小文字を区別しません("abc"と"ABC"が一致する)。区別したい場合は EXACT関数 を使ってIFS関数で書き換えます。例: =IFS(EXACT(A2, "ABC"), "X", EXACT(A2, "abc"), "Y", TRUE, "")
ExcelのSWITCH関数との違い
SWITCH関数はExcel(2019以降)とGoogleスプレッドシートで 基本動作はほぼ同じ です。構文・引数・既定値の扱いはすべて共通で、ファイルをやり取りしても結果がずれることはありません。
| 項目 | Googleスプレッドシート | Excel(2019以降) |
|---|---|---|
| 基本構文 | =SWITCH(式, 値1, 結果1, ..., [既定値]) | 同じ |
| 最大ペア数 | 126ペア | 126ペア |
| 既定値 | 最後の奇数引数 | 最後の奇数引数 |
| 大文字・小文字区別 | しない | しない |
| 全角・半角区別 | する | する |
| 配列対応 | なし(ARRAYFORMULAでも1セル分) | なし(スピル非対応) |
| 対応バージョン | 全バージョン | 2019以降またはM365 |
両環境での差は実質ないので、Excelで作ったSWITCH関数の数式はそのままスプレッドシートに貼っても動きます。Excel版の詳しい解説は ExcelのSWITCH関数の使い方 をご覧ください。
まとめ:SWITCH関数で完全一致のケース分岐をスッキリ書こう
SWITCH関数は、値と結果のペアを並べていくだけで完全一致のケース分岐ができる シンプルな関数です。ポイントをおさらいしましょう。
- 構文は
=SWITCH(式, 値1, 結果1, 値2, 結果2, ..., 既定値)。値と結果は必ずペアで指定 - 既定値を必ず設定して、
#N/Aエラーを防ぐ。未登録コードの発見もしやすくなる - IFネストより読みやすく、条件の追加・変更がカンタン
- 候補10個以下で固定なら SWITCH、10個超や変動ありなら VLOOKUP に切り替える
- 範囲条件(>=など)には IFS関数、連番には CHOOSE関数 を使い分ける
- 配列対応が必要なら IFS + ARRAYFORMULA に書き換える
まずは「部署コード→部署名」の変換から試してみてください。IF関数のネストの括弧地獄から解放されて、数式の見通しがグッと良くなりますよ。
