ExcelでIF文を何重にもネストしてはいけない理由――IFS・SWITCH・CHOOSEで読める数式に直す
こんな数式を見たことがあるはずです。
=IF(A2="東京",B2*1.1,IF(A2="大阪",B2*1.05,IF(A2="名古屋",B2*1.03,IF(A2="福岡",B2*1.02,B2))))これは「地域ごとに係数を変える」というシンプルなロジックです。でも読めません。修正も困難です。
IFのネストは「動いているからOK」ではありません。この数式は保守不能な爆弾です。
ネストしたIFが引き起こす3つの問題
問題① どこが対応しているかわからない
IFは「条件が真のとき」と「偽のとき」の2つの分岐を持ちます。ネストが深くなるほど、どのIFのTRUE/FALSEがどこに対応しているかを追うのが困難になります。
4重ネストになると、カッコの対応を目で追うだけで数分かかることがあります。
問題② 条件を追加・変更するたびに全体を書き直す必要がある
「札幌」を追加したい。そのためにはネスト全体の構造を把握して、正しい位置に挿入する必要があります。
条件が増えるほど、変更コストは指数的に増えます。
問題③ 閉じカッコの数がわからなくなる
4重ネストなら閉じカッコは4つ必要です。うっかり3つで送信すると「数式エラー」。数えながら入力する作業は、ミスが出やすい。
解決策①:IFS関数で横並びに書く(Excel 2019以降)
=IFS(
A2="東京", B2*1.1,
A2="大阪", B2*1.05,
A2="名古屋",B2*1.03,
A2="福岡", B2*1.02,
TRUE, B2
)IFSは「条件1, 値1, 条件2, 値2…」と横並びに書けます。ネストがないため、条件の追加・削除が簡単です。最後の`TRUE, B2`は「どれにも当てはまらない場合のデフォルト値」を意味します。
問題② 条件を追加・変更するたびに全体を書き直す必要がある
IFSなら1行追加するだけです。ネスト構造を壊す心配がありません。
解決策②:SWITCH関数で完全一致に対応する(Excel 2019以降)
=SWITCH(A2,
"東京", B2*1.1,
"大阪", B2*1.05,
"名古屋",B2*1.03,
"福岡", B2*1.02,
B2
)SWITCH関数は「この値が何かによって分岐する」パターンに最適です。`SWITCH(判定対象, 値1, 結果1, 値2, 結果2…, デフォルト)`の形で書きます。
IFSよりさらに短く書けます。ただし、完全一致のみ対応(「以上」「以下」などの比較条件には使えない)。
解決策③:CHOOSE関数で番号ベースの分岐をシンプルにする
=CHOOSE(C2, "低", "中", "高")C2が1なら「低」、2なら「中」、3なら「高」を返します。
数値インデックスで分岐できる場合はCHOOSEが最も簡潔です。優先度や評価ランクなど、数値で管理しているデータとの相性が良い。
まとめ:IF関数の使い分け
| 状況 | 使うべき関数 |
|------|------------|
| 2分岐(AかBか) | IF |
| 3分岐以上、比較条件あり | IFS |
| 3分岐以上、完全一致のみ | SWITCH |
| 数値インデックスで分岐 | CHOOSE |
「IFを重ねれば何でもできる」は正しいです。でも「できる」と「読める・直せる」は別の話です。IFS・SWITCH・CHOOSEを使い分けるだけで、数式の保守コストは大きく下がります。
もしこの記事が役に立ったら、スキ♡をポチっとしていただけると励みになります。
フォローしていただくと、同じような実務直結のExcel記事をお届けします。
IT実務ラボ|「なぜそうするか」の理由まで、丁寧に。
