
Excelで複雑な条件分岐を作るとき、気づいたらIF関数が何重にもなって
「もう、これ、どうなってるの!?」
ってなった経験、ありませんか?
いわゆる「ネスト」が深くなってしまう状態ですね。
ネストが5個、7個、いやそれ以上となると、作った本人も後から見返すと「なんだっけこれ…」なんてことになりがち。
でも大丈夫!この記事を読めば、そんな深くネストしたExcel関数ともサヨナラして、もっと見やすく、もっと使いやすいExcelシートを作るための具体的な方法がわかります。
なぜネストは「ごちゃごちゃ」になるの?
そもそも、なぜネストが深くなると使いにくくなるのでしょうか?
それは、まるで「入れ子人形」のように、条件の中にさらに条件が隠れていくからです。
=IF(条件1, IF(条件2, IF(条件3, IF(条件4, IF(条件5, “結果A”, “結果B”), “結果C”), “結果D”), “結果E”), “結果F”)
こんな数式を見たとき、どの「IF」がどの「条件」に対応しているのか、パッと見て理解するのは至難の業ですよね。
主な問題点は次の通りです。
可読性が低い: どこからどこまでが一つの条件なのか、括弧の対応は正しいのか、非常に読み解きにくいです。
エラーの温床: 括弧の数が合わない、条件の指定ミスなど、ちょっとしたミスが全体の数式に影響を与え、エラーを見つけるのが困難になります。
保守性が悪い: 数式の修正や変更が必要になったとき、影響範囲が広すぎてどこを直せば良いか分からなくなり、手間がかかります。
処理が重くなる可能性: 極端に深いネストは、ファイルの処理速度に影響を与えることもあります(大規模なシートの場合)。
ネストに悩んでいる方は大量で複雑なデータ処理をしている方が多いと思います。そんな方へ解決策を5つお伝えしていきますね!
ネストを減らす具体的なテクニック5選
さあ、ここからが本題です。
深くネストしてしまった関数をスッキリさせるための具体的なテクニックを5つご紹介します。
IFS関数でスッキリ多分岐! (Excel 2016以降)
「複数の条件があって、それぞれに対応する結果を出したい」そんなときにIF関数を何個も繋げていませんか?
もしあなたがExcel 2016以降のバージョンを使っているなら、IFS関数が神様のように助けてくれます。
IFS関数は、複数の条件とそれに対応する結果を羅列するだけで、IF関数のネストを不要にしてくれる優れものです。
使い方のイメージ: =IFS(条件1, 結果1, 条件2, 結果2, 条件3, 結果3, ..., TRUE, その他の結果)
【Before】IF関数のネスト
あるテストの点数に応じて評価を出すケースを考えてみましょう。
点数 (A列) | 評価 (B列) |
95 | |
78 | |
42 | |
65 |
ここに、以下の評価基準を当てはめるとします。
- 90点以上:S
- 70点以上:A
- 50点以上:B
- それ以外:C
ネストしたIF関数で書くとこうなります。
=IF(A2>=90,”S”,IF(A2>=70,”A”,IF(A2>=50,”B”,”C”)))

【After】IFS関数でスマートに!
同じ評価をIFS関数で書くと、こんなにスッキリします。
=IFS(A2>=90,”S”,A2>=70,”A”,A2>=50,”B”,TRUE,”C”)

どうですか?IFS関数の方が、どの条件でどの結果になるのかが一目瞭然ですよね。
最後のTRUE
は、「もし上記すべての条件に合致しなかった場合」の最終的な結果を指定するものです。
SWITCH関数でピンポイント切り替え! (Excel 2019以降)
特定のセルの値に応じて、複数の結果を切り替えたい場合は、SWITCH関数が非常に便利です。
これもExcel 2019以降のバージョンで利用できます。
SWITCH関数は、指定した値と合致する最初の値に対応する結果を返します。複数の「もし〜だったら」をスマートに記述できます。
使い方のイメージ: =SWITCH(比較したい値, 値1, 結果1, 値2, 結果2, ..., [合致しない場合の既定の結果])
【Before】IF関数のネスト
曜日コード(1:月、2:火…)から曜日名を表示するケースを考えてみましょう。
曜日コード (A列) | 曜日 (B列) |
1 | |
3 | |
7 |
ネストしたIF関数で書くとこうなります。
=IF(A2=1,”月”,IF(A2=2,”火”,IF(A2=3,”水”,IF(A2=4,”木”,IF(A2=5,”金”,IF(A2=6,”土”,”日”))))))

【After】SWITCH関数でシンプルに!
同じことをSWITCH関数で書くと、こうなります。
=SWITCH(A2,1,”月”,2,”火”,3,”水”,4,”木”,5,”金”,6,”土”,”日”)

SWITCH関数を使うことで、比較対象(A2)を何度も書く必要がなくなり、非常に見やすくなりましたね。
最後の「日」は、どの値にも合致しなかった場合の既定の結果です。
XLOOKUP/VLOOKUP/HLOOKUPで参照を効率化!
ネストが深くなる原因の一つに、「あるリストから、条件に合うものを探して表示する」という処理をIF関数とAND/OR関数で頑張ってしまっているケースがあります。
そんなときは、VLOOKUP関数やXLOOKUP関数(Excel 365/2019以降)の出番です!
これらの関数は、特定の値を別の表から検索し、対応する値を取り出すことに特化しています。
【Before】IF関数のネスト
商品コードから商品名と単価を取得するケースを考えてみましょう。
商品マスター
商品コード | 商品名 | 単価 |
A001 | ノート | 150 |
A002 | ボールペン | 100 |
A003 | 消しゴム | 80 |
注文データ
商品コード (A列) | 商品名 (B列) | 単価 (C列) |
A002 | ||
A001 | ||
A005 |
もしIF関数で頑張るとしたら…(実際には非常に複雑になるため、ここでは省略しますが、各コードに対してIF文を重ねていくイメージです)。
【After】VLOOKUP関数でスマートに!
商品名を検索する場合(商品マスターがB2:D4の範囲にあるとして):
=VLOOKUP(F2,A$2:C$4,2,FALSE)
単価を検索する場合:
=VLOOKUP(F2,A$2:C$4,3,FALSE)


#N/A
エラーが出た場合は、IFERROR
関数と組み合わせることで、「商品が見つかりません」といったメッセージを表示できます。
XLOOKUP関数ならもっと便利に! (Excel 365/2019以降)
XLOOKUP関数は、VLOOKUPの進化版のような関数で、検索方向の自由度が高く、より直感的に使えます。
商品名を検索する場合(商品コード列がB2:B4、商品名列がC2:C4にあるとして):
=XLOOKUP(A2,B$2:B$4,C$2:C$4,”商品なし”)
商品コード (A列) | 商品名 (B列) |
A002 | ボールペン |
A001 | ノート |
A005 | 商品なし |
XLOOKUP関数は、VLOOKUPのように列番号を指定する必要がなく、結果を返したい列を直接指定できるため、より間違いが少なくなります。
また、
検索値が見つからなかった場合の値を直接指定できるのも便利な点です。
作業列を効果的に使う
これが一番基本的なテクニックでありながら、非常に強力です。
特に、Excelに慣れていない人がチームにいて関数をいじる可能性があるのでしたらこの対応がお勧めです。
深くネストした関数は、複数の計算や条件判断を一つのセルでまとめて行っていることが多いです。
これを、途中の計算結果を別のセル(作業列)に書き出すことで、数式を分解し、ネストを解消できます。
【Before】ネストされたIF関数
例えば、「A列が10以上で、かつB列が『合格』なら『優良』、A列が5以上で『合格』なら『良』、それ以外は『再提出』」という条件を一つのセルで表現する場合。
=IF(AND(A2>=10,B2=”合格”),”優良”,IF(AND(A2>=5,B2=”合格”),”良”,”再提出”))
数値 (A列) | 判定 (B列) | 結果 (C列) |
12 | 合格 | |
7 | 合格 | |
3 | 合格 | |
15 | 不合格 |

【After】作業列を使って分解!
- D列に「A列が10以上かつB列が合格か」を判断する作業列
=AND(A2>=10,B2="合格")
- E列に「A列が5以上かつB列が合格か」を判断する作業列
=AND(A2>=5,B2="合格")
数値 (A列) | 判定 (B列) | 結果 (C列) | D列 (作業列1) | E列 (作業列2) |
12 | 合格 | 優良 | TRUE | TRUE |
7 | 合格 | 良 | FALSE | TRUE |
3 | 合格 | 再提出 | FALSE | FALSE |
15 | 不合格 | 再提出 | FALSE | FALSE |
そして、C列の最終結果は、これらの作業列を使ってシンプルに書きます。
=IF(D2,”優良”,IF(E2,”良”,”再提出”))
どうでしょうか?
C列の数式が格段に読みやすくなったのがわかると思います。
D列やE列の計算結果を確認しながら、数式の意図を理解することも容易になります。
作業列は最終的に非表示にしたり、別のシートに移動させたりすることで、見た目をスッキリ保つことができます。

LAMBDA関数で「自分だけの関数」を作る (Excel 365)
これは少し上級者向けのテクニックですが、Excel 365のユーザーであれば、
LAMBDA関数を使って、自分で定義した関数を作成することができます。
同じような計算ロジックを何度も使う場合や、複雑な計算式に分かりやすい名前を付けたい場合に非常に有効です。一度定義してしまえば、あとは普通の関数のように呼び出すだけなので、数式が驚くほどスッキリします。
例えば、「税込み価格を計算する」という単純な計算でも、=A2*(1+B2)
のように直接数式を書く代わりに、=税込み価格(A2,B2)
のように書けるイメージです。
LAMBDA関数の使い方:
- 「数式」タブ > 「名前の管理」を開きます。
- 「新規作成」をクリックします。
- 名前を付けます(例:
_総所得計算
)。 - 参照範囲にLAMBDA関数でロジックを記述します。 例えば、
=LAMBDA(基本給, 手当, 控除, 基本給+手当-控除)
- 作成した名前をセルで呼び出します。
=_総所得計算(A2,B2,C2)
このように、計算ロジックをLAMBDA関数に閉じ込めることで、シート上の数式を極めて簡潔に保ち、ネストを完全に回避することができます。
ネストは悪じゃない!適切な使い方で「見やすいExcel」に
ここまでネストを減らす方法について説明してきましたが、実は「ネスト=悪」ではありません。
ある程度のネストは、数式をコンパクトに保ち、関連する処理をまとめる上で有効です。
IF関数を2〜3個ネストするくらいであれば、むしろ読みやすいと感じる人もいるでしょう。
問題は、その「深さ」と「複雑さ」です。
何重にもなるIF関数
AND関数やOR関数が複雑に絡み合う
複数の種類の関数が混在している
このようなケースで「ごちゃごちゃするな」「読み解きにくいな」と感じたら、今回ご紹介したテクニックを試してみてください。
重要なのは、「自分(や他の人)が後から見て、数式の意図を理解しやすいかどうか」です。
まとめ:ネストを解消して、快適Excelライフを!
いかがでしたでしょうか?ExcelのIF関数などでネストが深くなりすぎて困っていた方も、以下のテクニックを試すことで、数式が劇的に見やすく、使いやすくなるはずです。
- IFS関数で多分岐をスマートに!(Excel 2016以降)
- SWITCH関数でピンポイント切り替え!(Excel 2019以降)
- XLOOKUP / VLOOKUP / HLOOKUPで参照を効率化!
- 作業列を効果的に使って数式を分解!
- LAMBDA関数で「自分だけの関数」を作る!(Excel 365)
いきなりすべてのテクニックをマスターする必要はありません。
まずは「これならできそう!」と感じたものから一つずつ試してみてください。
ネストの悩みが解消されれば、Excelでの作業がもっと楽しく、効率的になること間違いなしです!
コメント