IFS関数 完全ガイド:IFネスト・SWITCH・CHOOSE・XLOOKUPとの使い分け

1 やりたいこと

「90点以上ならA、80点以上ならB、70点以上ならC…」のように、条件が多段階あるときにIF関数のネスト地獄を回避したい。

さらに「完全一致で分岐したいのか」「範囲(以上・以下)で分岐したいのか」によって最適な関数が異なります。本記事では IFS・IF・SWITCH・CHOOSE・XLOOKUP を横断的に比較し、場面ごとの最適解を示します。

2 IFS関数の構文と基本

構文

=IFS(条件1, 値1, 条件2, 値2, ..., TRUE, "その他")

条件は上から順に評価され、最初にTRUEになったものの値が返る。
最大 127 組 の条件・値ペアを指定可能(Excel 2019以降 / Microsoft 365など)。

具体例:成績判定

=IFS(A1>=90, "A", A1>=80, "B", A1>=70, "C", A1>=60, "D", TRUE, "F")
⚠️ 最後の TRUE を忘れないこと
どの条件にも当てはまらなかった場合、IFS関数は #N/A エラーを返します。
必ず末尾に TRUE, "デフォルト値" を入れましょう。これがIF関数のELSE(どれにも該当しなかった場合)に相当します。
💡 条件の記述順序に注意
IFS関数は「最初にTRUEになった条件」で確定します。成績判定のように範囲条件を使う場合、厳しい条件(>=90)から順に書く必要があります。
もし A1>=60 を先に書くと、90点の人も「D」と判定されてしまいます。

3 IFネストとの違い

旧バージョンでの代替法:IF多段ネスト

=IF(A1>=90, "A", IF(A1>=80, "B", IF(A1>=70, "C", IF(A1>=60, "D", "F"))))
データテーブル
比較項目IFネストIFS
可読性閉じ括弧 )))) が末尾に連続し見づらい条件と値が平坦に並ぶ
ELSE(デフォルト値)第3引数に自然に書ける末尾に TRUE,"値" が必要(忘れると#N/A)
最大条件数64段(ネスト上限)127組
短絡評価一致した時点で残りを評価しない全引数を事前評価する(後述)
数式のメンテナンス性途中に条件を挿入・削除しにくい条件ペアを追加・削除しやすい
💡 IFS が優れるポイント
IFネストでは5段階の成績分岐だけで4重ネストになります。IFS関数は構造的にフラットなので、10段階以上の分岐でも見通しが良いままです。条件の追加・削除もペア単位で行えるため、メンテナンスが格段に楽になります。

4 SWITCH関数との違い(完全一致 vs 範囲条件)

SWITCH関数の構文

=SWITCH(式, 値1, 結果1, 値2, 結果2, ..., デフォルト値)

「式」を一度だけ指定し、各「値」と完全一致で比較。一致した「結果」を返す。
末尾にペアにならない引数を1つ置くと、それがデフォルト値(ELSE相当)になる。

具体例:部署コード → 部署名

=SWITCH(B2, "S", "営業部", "E", "技術部", "A", "総務部", "不明")

IFS vs SWITCH:核心の違い

データテーブル
比較項目IFSSWITCH
条件の種類範囲条件(>=, <=, <>)も自由自在基本は完全一致のみ
セル参照の回数条件ごとに毎回セルを参照
A1>=90, A1>=80, ...
先頭で1回だけ指定
SWITCH(A1, ...)
デフォルト値TRUE,"値" が必要末尾に値を1つ書くだけ
数式の長さ条件式を毎回書くため長くなりがち完全一致なら最も短い
複数列の条件A1="東京", B1>=100 など異なる列を条件にできる1つの式しか評価できない
最大条件数127 組126 組
✅ 使い分けの原則
完全一致(コード→名前、記号→ラベル)の変換 → SWITCH がベスト。セル参照1回で済みスッキリ。
範囲条件(○○以上、○○未満)や複数列を横断する条件IFS が適任。

5 SWITCH(TRUE,...) テクニック

「SWITCHは完全一致しかできない」というのは正確ではありません。第1引数に TRUE を指定することで、範囲条件にも対応できます。

=SWITCH(TRUE, A1>=90,"A", A1>=80,"B", A1>=70,"C", A1>=60,"D", "F")

TRUE を「探すべき値」にセットし、各条件式の中で最初に TRUE を返したものが採用される。
末尾の "F" がデフォルト値。IFS と違い自然にデフォルト値を書ける。

データテーブル
比較項目IFSSWITCH(TRUE,...)
範囲条件対応対応
デフォルト値の書き方TRUE,"F" と書く必要あり末尾に "F" と書くだけ
セル参照の回数どちらも条件ごとに参照が必要
可読性良いデフォルト値の扱いがよりシンプル
⚠️ SWITCH(TRUE,...) の注意点
SWITCH(TRUE,...) を使うと、SWITCHの「セル参照1回」というメリットは失われます。範囲条件の場合、IFS とほぼ同等の冗長さになるため、「IFS で十分」と考える人もいます。好みの問題ですが、デフォルト値が自然に書ける点で SWITCH(TRUE,...) を好むユーザーも多いです。

6 CHOOSE関数との違い

CHOOSE関数の構文

=CHOOSE(インデックス, 値1, 値2, 値3, ...)

インデックスが 1 なら値1、2 なら値2 … を返す。「1から始まる連番」でしか分岐できないのが最大の制約。

具体例:月番号 → 四半期

=CHOOSE(MONTH(A1), "Q1","Q1","Q1","Q2","Q2","Q2","Q3","Q3","Q3","Q4","Q4","Q4")
データテーブル
比較項目IFSSWITCHCHOOSE
条件指定自由な論理式任意の値と完全一致1始まりの連番のみ
文字列キー不可
デフォルト値TRUE必須末尾に書くだけなし(#VALUE!エラー)
最大条件数127126254
適用場面範囲・複合条件完全一致の変換連番→値の変換
💡 CHOOSEの出番はかなり限定的
CHOOSE は WEEKDAY や MONTH の戻り値(1〜12の連番)のように、インデックスが自然に 1 から始まる場合に限ってシンプルに書けます。それ以外では SWITCH が上位互換と考えてよいでしょう。

7 XLOOKUP / VLOOKUPとの比較

条件分岐が多くなる場合、そもそも数式内にロジックを書かず、別表(マスタ)に持たせる設計が有力な選択肢になります。

マスタ参照方式

データテーブル
コード(E列)部署名(F列)
S営業部
E技術部
A総務部
=XLOOKUP(B2, E:E, F:F, "不明")
データテーブル
比較項目IFS / SWITCHXLOOKUP(マスタ参照)
条件の管理場所数式の中セル上の別表(変更が容易)
条件の追加数式を編集する必要あり別表に行を追加するだけ
条件数が多い場合数式が膨大になる別表の行数が増えるだけ
範囲条件(以上・以下)IFS が得意XLOOKUPの近似一致モードで対応
数式の分かりやすさ条件が多いと読みにくい数式自体は短い
✅ 目安
条件が 5個以下で変更頻度が低い → IFS / SWITCH で数式内に書くほうが手軽。
条件が 6個以上、または頻繁に変更がある → 別表 + XLOOKUP が保守性で圧倒的に優秀。

8 5関数 総合比較表

データテーブル
項目 IFネスト IFS SWITCH CHOOSE XLOOKUP
完全一致 ◎ 最適○(連番のみ)
範囲条件(>=, <=) ◎ 最適△(TRUE技必要)×○(近似一致)
複数列の条件 ×××
デフォルト値 ◎ 自然△ TRUE必須◎ 自然× なし◎ 自然
セル参照の回数 条件ごと条件ごと1回1回1回
可読性(条件多数時) ×
短絡評価 ◎ する× しない× しない× しない
条件の外部管理 ××××◎ 別表

9 どの関数を使う? フローチャート

Q1. 条件は何個ある?

1〜2個 → シンプルに IF関数 でOK。
3個以上 → 次へ。

Q2. 条件の種類は?

完全一致(コード→名前、値の変換など)→ Q3 へ。
範囲条件(以上・以下・未満)→ IFS関数(または SWITCH(TRUE,...))。
複数列にまたがる条件(A列="東京" かつ B列>=100 など)→ IFS関数

Q3. 条件は何個ある? 変更頻度は?

5個以下・変更少ないSWITCH関数(数式内で完結、最も短くてスッキリ)。
6個以上・変更が多い別表 + XLOOKUP(数式を変えずにマスタ修正だけで対応)。

Q4. 旧バージョン(2016以前)への互換性が必要?

必要IFネスト、または CHOOSE(連番の場合)。
不要 → IFS / SWITCH を活用。

10 知っておくべき落とし穴

落とし穴①:IFS・SWITCHは全引数を評価する(短絡評価しない)

通常のIF関数は、条件が確定した時点で残りの引数を評価しません(短絡評価)。しかし、IFS関数とSWITCH関数は、結果に使わない引数も含めて全て事前に評価します

⚠️ 問題が起きる例
=IFS(A1="割り算", B1/C1, A1="掛け算", B1*C1, TRUE, 0)

A1="掛け算" でも、B1/C1 が評価される。C1=0 の場合 #DIV/0! エラーが発生する可能性がある。
IF関数のネストであれば、該当しない分岐の計算は実行されない。

🔴 パフォーマンスへの影響
引数に重い計算(SUMPRODUCT、大規模XLOOKUP など)を含めている場合、条件に一致しなくても全て計算されるため、想定外の処理時間がかかることがあります。
重い計算を分岐させたい場合は、IFネストまたは LET関数と組み合わせたIFネスト を使いましょう。

落とし穴②:IFS の末尾 TRUE 忘れ

IFS関数は全条件に一致しないと #N/A エラーになります。IF関数の「第3引数を省略すると FALSE が返る」動作とは異なります。

落とし穴③:旧バージョンでの互換性

IFS・SWITCH は Excel 2016 以前では使用できません。旧バージョンで開くと数式バーに =_xlfn.IFS(...) と表示され、計算結果がエラーになります。共有先のExcelバージョンに注意しましょう。

落とし穴④:SWITCH の条件順序は「一致したら終了」

SWITCH は最初に一致した値の結果を返し、以降は無視します。値が重複していた場合、2番目以降は絶対に返りません。意図しない重複がないか確認しましょう。

11 実務パターン集

パターン① 成績ランク判定(範囲条件)→ IFS が最適

=IFS(A1>=90,"A", A1>=80,"B", A1>=70,"C", A1>=60,"D", TRUE,"F")

理由:範囲条件(>=)を扱うため、IFS が最も素直。SWITCHでは TRUE テクニックが必要になり冗長。

パターン② 部署コード→部署名(完全一致)→ SWITCH が最適

=SWITCH(B2, "S","営業部", "E","技術部", "A","総務部", "H","人事部", "不明")

理由:完全一致で、セル参照1回。IFS で書くと B2="S","営業部", B2="E","技術部", ... とB2を何度も書く羽目に。

パターン③ 曜日番号→曜日名(連番)→ CHOOSE が最適

=CHOOSE(WEEKDAY(A1,2), "月","火","水","木","金","土","日")

理由:WEEKDAY の戻り値は 1〜7 の連番。CHOOSE の制約「1始まりの連番」にピッタリ。

パターン④ 商品マスタ参照(条件多数・変更多い)→ XLOOKUP が最適

=XLOOKUP(A2, マスタ[商品コード], マスタ[商品名], "該当なし")

理由:数十〜数百の条件を数式に書くのは非現実的。別シートの一覧表をXLOOKUPで参照するのが保守性・拡張性で最善。

パターン⑤ LET + IFネスト(重い計算の条件分岐)

=LET( cat, A1, IF(cat="A", SUMPRODUCT(重い計算A), IF(cat="B", SUMPRODUCT(重い計算B), 0)) )

理由:IFS/SWITCHは全引数を評価するため、IFネスト(短絡評価あり)にしてパフォーマンスを確保。LET で変数を定義し可読性も維持。

12 まとめ

データテーブル
場面最適な関数
条件が1〜2個でシンプルIF
範囲条件(>=, <=)で多段分岐IFS
完全一致で値を変換SWITCH
1始まりの連番インデックスで分岐CHOOSE
条件が多数・変更頻度が高いXLOOKUP(別表参照)
重い計算を条件分岐したいLET + IFネスト(短絡評価を活かす)
✅ 覚えておくべき3つの原則
完全一致なら SWITCH範囲条件なら IFS ─ これが基本の使い分け。
② 条件が増えてきたら数式の外(別表 + XLOOKUP)に出すことを検討。
③ IFS / SWITCH は全引数を評価する。重い計算がある場合は IF ネスト(短絡評価)を選ぶ。

🔗 関連記事