IF関数を3段・4段とネストすると、括弧の対応が崩れやすく、後から読み返しても何をしているのか分かりにくくなります。SWITCH関数を使えば「この値のときはこの結果」というペアを並べるだけで同じ分岐を実現でき、数式の長さも約30%短くなります。
この記事では、ネストしたIF関数をSWITCH関数に書き換える手順を、実例とスクリーンショットで解説します。SWITCH関数は Microsoft 365 または Excel 2019 以降 で利用できます。
記事の手順を試せるサンプルファイルを用意しました。部門コード変換のデータと完成済みの数式が入っています。
ネストしたIFをSWITCHに書き換える
部門コード(1〜5)を部門名に変換する数式を例にします。IF関数でこの変換を書くと、5段のネストが必要です。
Before: 5段ネストのIF関数
=IF(B2=1,"営業部",IF(B2=2,"経理部",IF(B2=3,"人事部",IF(B2=4,"開発部",IF(B2=5,"総務部","その他")))))
閉じ括弧が5つ並び、どの条件がどの結果に対応しているのか一目では分かりません。
After: SWITCH関数
=SWITCH(B2,1,"営業部",2,"経理部",3,"人事部",4,"開発部",5,"総務部","その他")
SWITCH関数では、比較する値(1, 2, 3…)と返す結果(”営業部”, “経理部”…)のペアを順番に並べるだけです。括弧のネストは1段で済み、数式の文字数も約30%削減できます。
※ Microsoft 365 環境では、数式バーに =@SWITCH(...) のように先頭に @ が表示されることがあります。これは Excel が自動で付ける暗黙的共通部分演算子で、動作に違いはありません。数式の入力時に @ を付ける必要はなく、=SWITCH(...) とそのまま入力してください。
SWITCH関数の引数と書き方
SWITCH関数の構文は次のとおりです。
=SWITCH(式, 値1, 結果1, [値2, 結果2], ..., [既定値])| 引数 | 必須/省略可 | 説明 |
|---|---|---|
| 式 | 必須 | 比較の対象となるセル参照や数式 |
| 値1 | 必須 | 式と比較する値。完全一致で判定される |
| 結果1 | 必須 | 値1に一致したときに返す値や計算式 |
| 値2, 結果2, … | 省略可 | 追加の値と結果のペア。最大126ペアまで指定可能 |
| 既定値 | 省略可 | どの値にも一致しないときに返す値。省略すると #N/A エラー |
SWITCH関数は Microsoft 365 または Excel 2019 以降で利用できます。Excel 2016 以前では #NAME? エラーになります。
実践例 ― 部門コードを部門名に変換する
社員一覧の部門コード(1〜5の数値)を部門名に変換する手順を見ていきます。
手順1: 部門名を表示したいセル(C2)を選択し、=SWITCH( と入力します。
手順2: 第1引数に比較対象のセルを指定します。ここでは部門コードが入っている B2 です。
手順3: 値と結果のペアをカンマで区切って入力します。
=SWITCH(B2,1,"営業部",2,"経理部",3,"人事部",4,"開発部",5,"総務部","その他")末尾の "その他" は既定値です。部門コードが1〜5のどれにも一致しない場合に返されます。
手順4: Enter で確定したら、セルC2をコピーしてC13まで貼り付けます(オートフィル)。

C列(SWITCH)とD列(ネストIF)を見比べると、まったく同じ結果が得られていることが分かります。数式の長さはSWITCH関数の方が約30%短くなります。
応用パターン
WEEKDAY関数と組み合わせて曜日名を返す
WEEKDAY関数の戻り値(1〜7)をSWITCH関数で曜日の文字に変換できます。
=SWITCH(WEEKDAY(A2),1,"日",2,"月",3,"火",4,"水",5,"木",6,"金",7,"土")
TEXT関数の "aaa" でも曜日は表示できますが、SWITCH関数なら「月曜日」「月曜」のような自由な文字列を返せるのが利点です。
結果に計算式を返す
SWITCH関数の結果部分には、固定値だけでなく計算式も書けます。
=SWITCH(A2,"税込",B2*1.1,"税抜",B2,"不明")この例では、区分が「税込」なら税抜価格に1.1を掛けた値、「税抜」ならそのままの値を返します。
式にも関数を使える
SWITCH関数の第1引数(式)にもLEFT関数やMONTH関数などの関数を使えます。
=SWITCH(LEFT(A2,1),"東","関東","大","関西","名","中部","不明")この例では、セルA2の先頭1文字を取り出してSWITCH関数で地域名に変換しています。
IFS関数・VLOOKUP・CHOOSEとの使い分け
SWITCH関数と似た機能を持つ関数がいくつかあります。場面に応じた使い分けを整理します。
| 観点 | SWITCH | IFS | VLOOKUP | CHOOSE |
|---|---|---|---|---|
| 比較方法 | 値の完全一致 | 条件式(TRUE/FALSE) | テーブル検索 | 連番インデックス |
| 範囲判定(80点以上で”B”など) | 不向き | 得意 | 近似一致で可能 | 不可 |
| 非連番の値(10, 20, 30…) | 得意 | 得意 | 得意 | 不可 |
| 別テーブルが必要か | 不要 | 不要 | 必要 | 不要 |
| 対応バージョン | 2019以降 | 2019以降 | 全バージョン | 全バージョン |
使い分けの目安:
- 値の完全一致で分岐したい → SWITCH関数
- 「以上」「以下」などの範囲判定で分岐したい → IFS関数
- 対応表がセル上にすでにある → VLOOKUP関数
- 連番(1, 2, 3…)の順番に結果を返したい → CHOOSE関数
なお、=SWITCH(TRUE, A2>=90, "A", A2>=70, "B", ...) のように第1引数にTRUEを渡すとIFS関数と同じ動作になりますが、IFS関数を使った方が意図が明確です。範囲判定にはIFS関数を使いましょう。
SWITCH関数の注意点とエラー対策
既定値を省略すると #N/A エラー
どの値にも一致せず、既定値も設定していない場合、SWITCH関数は #N/A エラーを返します。想定外の値が入る可能性がある場合は、必ず末尾に既定値を指定しましょう。
大文字と小文字を区別しない
SWITCH関数では、テキストの大文字と小文字は同じ値として扱われます。たとえば "abc" と "ABC" は一致します。大文字小文字を区別して分岐したい場合は、EXACT関数とIFS関数を組み合わせてください。
数値と文字列は区別する
大文字小文字は区別しませんが、データ型は区別します。数値の 1 と文字列の "1" は別の値として扱われます。セルに緑の三角マーク(数値が文字列として保存されている)が表示されていると、SWITCH関数の数値比較が一致しないことがあります。
空のセルは 0 として扱われる
空のセルをSWITCH関数で比較すると、空文字列 "" ではなく数値 0 として扱われます。空セルを空文字列で照合しようとしても一致しません。空セルの判定が必要な場合は、0 を値に指定するか、別途IF関数で空白チェックを行ってください。
複数の値に同じ結果を返したいとき
「コード1, 2, 3のどれかならグループA」のような指定をしたい場合、SWITCH関数ではOR条件をまとめて書くことができません。値ごとに同じ結果を繰り返す必要があります。
=SWITCH(A2,1,"グループA",2,"グループA",3,"グループA",4,"グループB","その他")対応する値の数が多い場合は、対応表をセルに作ってVLOOKUP関数で検索する方が管理しやすくなります。
まとめ
- SWITCH関数は「この値のとき → この結果」のペアを並べるだけで、ネストしたIF関数を大幅に短くできる
- 既定値の指定を忘れずに(省略すると
#N/A) - 大文字小文字は区別しないが、数値と文字列は区別する
- 範囲判定(「80点以上」など)にはIFS関数、対応表があるならVLOOKUP関数が適任
- Microsoft 365 または Excel 2019 以降で利用可能
コピペ用の数式を再掲します。
=SWITCH(B2,1,"営業部",2,"経理部",3,"人事部",4,"開発部",5,"総務部","その他")数式が長くなりすぎた場合は、LET関数で長い数式を分解して読みやすくする方法もあわせてご覧ください。
コメント