先月、経理から引き継いだ経費精算チェック表を開いて、画面をそのまま閉じたくなりました。数式バーが3行分に折り返され、IF(が7回登場する式です。カッコの対応が合っているかを目で追うだけで20分近くかかり、結局どこで何を判定しているのか、最後まで完全には把握できませんでした。作った本人はすでに異動していて、聞ける相手もいません。
正直に言うと、この式を「直す」のではなく「作り直す」ほうが早いと判断するまでに、まる1日かかっています。実務でExcelを扱っていると、こういう場面に一度は当たるのではないでしょうか。今回は、IF関数のネストがなぜここまで膨らんでしまうのか、その原因の部分と、実際に読めなくなった式をどう分解すれば「半年後の自分でも直せる式」に戻せるのかを、具体的な手順とあわせて整理していきます。
まずは3つの質問で、今の式の状態を確かめる
分解の話に入る前に、今抱えている式がどの段階にあるかをチェックしておきましょう。次の3つに、いくつ「はい」と答えられるでしょうか。
- その式を、他の人に口頭だけで説明できますか
- 条件を1つ増やすとき、どこを直せばいいかすぐに分かりますか
- 数式バーを見ずに、条件の数をそらで言えますか
3つとも自信を持って「はい」と言えないなら、その式はすでに「動いてはいるが、誰も触りたがらない」状態に近づいているサインです。ここから先は、なぜこうなるのか、どうやって元に戻すのかを順番に見ていきます。
ネストは技術力ではなく、足し算の積み重ねで伸びる
真面目に式を書く人ほど、ネストは伸びやすいものです。理由は単純で、「今の式の外側にもう1個IFを足せば、とりあえず動く」からです。条件が1つ増えただけなら、この足し方でまったく問題は起きません。厄介になるのは、その足し算が2回、3回と重なっていったときです。
さらに厄介なのは、この足し算がたいてい「忙しいとき」に起きるという点です。締め切り直前に「あ、この条件も追加しておいて」と言われると、式全体を見直す余裕はなく、とりあえず外側にIFを1個足して収める、という判断になりがちです。その場では正解に見えるのですが、数か月後の自分や、引き継いだ人を確実に苦しめることになります。
実際にあった話:経費精算表が7段ネストに育つまで
先ほど触れた経費精算チェック表を例に、どうやって式が育っていったのかを追ってみます。
最初は「上限額(3万円)を超えたら申請不可」という、1条件だけのシンプルなIFでした。ここまでは誰が見ても分かる式です。
数週間後、「出張費だけは上限を5万円にしたい」という例外が入り、条件分岐が1つ増えました。さらに翌月、「特定の部署だけは、承認者が違うので処理を分けたい」という要望が追加され、また1個。その次は「経費区分によって、そもそも上限そのものが変わる」という仕様が入り、条件はさらに複雑になりました。
こうして積み重なった結果、最終的な式はIFが7重になり、本来の目的だった「上限額を超えているかどうか」の判定よりも、例外を仕分けるための条件のほうが式の中で長くなっていました。担当者が異動した後にこれを引き継いだ私は、修正1件のために丸1日を費やすことになったわけです。この経験から言えるのは、ネストが伸びるのは能力の問題ではなく、「そのつど外側に足す」という選択を積み重ねた結果だということです。
根っこにある問題は、いつも同じ
先ほどの経費精算の例に限らず、ネストが伸びていくケースに共通する問題は1つです。判定条件と計算ロジックを、1つのセルにすべて詰め込もうとしていることです。
この「1セルに詰め込みすぎる」という問題そのものについては、1セル完結の数式が招くトラブルを扱った記事でも詳しく取り上げていますので、あわせて確認してみてください。

これは実はIF関数だけの話ではありません。条件付き集計に使うSUMIFSやCOUNTIFSでも、条件を後から後から積み重ねていくと、どの条件がどの列を見ているのか分からなくなる、という同じ現象が起こります。つまりIF関数のネストは「IFという関数固有の欠陥」ではなく、「1つのセルに役割を詰め込みすぎている」という、もっと広いExcel設計の問題の、ひとつの現れ方に過ぎません。
なお、そもそもIF関数の基本構文からあらためて確認したい場合は、IF関数の使い方を基礎から解説している記事もあわせてご覧ください。条件分岐でよくある間違いも整理しています。

分解の道具箱:状況に応じて使い分ける3つの方法
ここからは、実際に伸びてしまった式をどう分解するかです。状況によって向き不向きがあるので、3つの方法を道具箱として持っておくと判断が早くなります。
道具①:別表+VLOOKUPで管理する
条件と結果の組み合わせを、別の表にまとめてしまう方法です。
=VLOOKUP(A2, F2:G6, 2, FALSE)
区分と単価(あるいは上限額)の対応表を作り、この式で参照するだけです。条件が増えても式そのものは変えず、表に行を1行追加するだけで対応できます。経費精算の例で言えば、「部署別の上限額」「経費区分別の上限額」をそれぞれ別表にしてしまえば、IFを重ねる必要はそもそもなくなります。実務でいちばん応用が利く方法です。
VLOOKUPそのものの書き方や、検索方法の引数をFALSEにし忘れるといった注意点については、VLOOKUPの使い方を基本から解説している記事もあわせて確認しておくと安心です。

道具②:途中列で役割を分ける
別表を作るほどではない、ちょっとした処理のときに向いている方法です。1つの式に判定・計算をまとめず、列を分けて役割ごとに処理します。
- B列:どの区分に該当するかを判定する
- C列:区分に応じた上限額を決める
- D列:実際の金額と上限額を比較して、申請可否を出す
1つ1つの式はシンプルになるので、後から見返したときに「どこで何をしているか」がすぐ分かります。作業列が増えることに抵抗があるかもしれませんが、列を非表示にしておけば見た目は変わりませんし、修正するときだけ再表示すれば十分です。別表を作るほど条件の種類が多くないけれど、判定と計算を同じ式に詰め込むと長くなりすぎる、という中規模のケースにちょうどよい方法です。
道具③:IFS・SWITCHで書き方だけでも整理する
別表を作るほどの規模ではないけれど、今のネストのままでは辛い、という場合の中間案です。
=IFS(A2="出張費",50000, A2="通常経費",30000, A2="消耗品",20000)
カッコの入れ子がなくなる分、通常のIFのネストよりは見やすくなります。似た関数にSWITCHもあり、「1つの値がどの候補に当てはまるか」を判定したいときはこちらのほうがすっきり書けることもあります。ただし、どちらも条件の数そのものが減るわけではないので、条件が今後も増える見込みがあるなら、最初から道具①の別表+VLOOKUPで組んだほうが、後々のメンテナンスは楽になります。
どれを選ぶか迷ったときの考え方
3つとも「正解」を出せる方法なので、選ぶ基準は「条件が今後どう変わりそうか」です。条件が増え続ける可能性が高いなら道具①、今の条件数のまま数値だけ変わりそうなら道具③、判定と計算をいったん分けて見通しをよくしたいだけなら道具②、というのが実務での目安です。迷ったら、まずは道具①で組んでおくと後悔しにくい、というのが7段ネストを1日かけて作り直した経験からの実感です。
実際、経費精算表を道具①(別表+VLOOKUP)で作り直したところ、7段ネストだった式はVLOOKUP1本に置き換わりました。以前は条件を1つ変えるたびに式全体を読み直して20〜30分かかっていた修正作業が、今では対応表の数値を書き換えるだけで1〜2分に短縮されています。見た目のきれいさよりも、この「修正にかかる時間」の差こそが、分解する意味だと実感した出来事でした。
今日からできる3ステップ
理屈は分かっても、いざ着手するとなると腰が重いものです。まずは次の3ステップだけ試してみてください。
- 今いちばん頻繁に修正が入る条件を1つだけ選ぶ
- その条件だけを別表かIFSに切り出す
- 動作を確認できたら、残りの条件も同じ手順で1つずつ移す
一度に全部を直そうとすると挫折しやすいので、部分的に始めるだけで十分です。次に修正が入ったときの負担は、それだけでかなり軽くなります。
よくある質問
Q. ネストは何段までなら許容範囲ですか
目安は3段までです。4段目に入ったら、道具①〜③のどれかに切り替えるタイミングと考えてください。ただし段数だけで判断せず、条件が今後も増える見込みかどうかもあわせて考える必要があります。条件が2〜3個で今後も増えないのであれば、無理に分解する必要はありません。
Q. IFSとSWITCH、結局どちらを使えばいいですか
「1つの区分に応じて値を変える」ような、比較対象が1つの値のケースはSWITCHのほうがすっきり書けます。「複数の異なる条件を並べる」ケースはIFSが向いています。どちらも条件数が増えると読みにくくなる点は同じなので、あくまで応急処置という位置づけで考えておくのが安全です。
Q. 途中列を増やすと、表が見づらくなりませんか
見た目上は増えますが、列を非表示にしておけば普段の見た目は変わりません。修正が必要なときだけ再表示すればよいので、「見づらさ」と「直しやすさ」はトレードオフではなく、非表示機能を使えば両立できます。
Q. すでに複雑になった式を、途中から分解するのは大変ではありませんか
一度に全部を直そうとすると大変です。先ほどの3ステップのとおり、まずは今いちばん頻繁に修正が入る条件だけを切り出すところから始めれば、部分的な着手でも十分に効果があります。
Q. 分解したら、以前の式と結果が変わってしまわないか不安です
別表やIFS・SWITCHに置き換えたあとは、元の式と同じ行で結果を並べて比較するのが確実です。数行分だけ新しい式をとなりの列に置き、元のIF式の結果と1件ずつ突き合わせてから、問題なければ古い式を消す、という手順を踏めば、置き換えによるミスはほぼ防げます。急いで一気に上書きせず、検算の工程を1つ挟むことを習慣にしておくと安心です。
分解したあとに起きやすい3つのつまずき
道具箱を使って分解したからといって、すべてが一発でうまくいくわけではありません。実際に自分や周りの人がつまずいたポイントを3つ挙げておきます。
つまずき①:別表の参照範囲を絶対参照にし忘れる
VLOOKUPで別表を参照するとき、F2:G6のような範囲をそのままコピーすると、行がずれるたびに参照先もずれてしまいます。経費精算表を作り直したときも、最初の数式を下にコピーした瞬間に結果がすべて空白になり、原因を探すのに10分ほど無駄にしました。範囲部分は$F$2:$G$6のように固定しておくのが基本です。コピーする前提の式では、範囲を固定するかどうかを必ず確認する癖をつけておくと、このミスはほぼ防げます。
つまずき②:区分名の表記ゆれで一致しない
対応表の区分名と、判定したいセルの区分名の表記が、全角・半角や末尾の空白などで微妙にずれていると、VLOOKUPは正しく引っかかりません。「出張費」と「出張費 」(末尾に全角スペース)のように、見た目ではほぼ気づけない違いがエラーの原因になっていたこともあります。対応表を作るときは、区分名をプルダウン(入力規則のリスト)から選ばせる形にしておくと、表記ゆれそのものを入力の時点で防げます。
つまずき③:途中列を消すタイミングを誤る
途中列で役割を分けたあと、「見た目をすっきりさせたい」という理由で作業列そのものを削除してしまうと、最終列の式が参照エラーになります。途中列は「非表示にする」ものであって、「削除する」ものではありません。この区別を関係者全員が理解していないと、せっかく分解した式が別の理由でまた壊れてしまいます。列を触ってよいのは式を書いた本人だけ、というルールを共有しておくと安心です。
この3つは、いずれも「分解の考え方が間違っていた」のではなく、「分解した後の運用でつまずいた」というケースです。分解そのものと同じくらい、分解したあとの扱い方にも気を配っておく必要があります。
まとめ
IF関数が読めなくなる原因は、条件を足し続けること、1セル完結にこだわること、設計を見直すタイミングを逃すこと、この3つに集約されます。解決策はシンプルです。迷ったら分解する。別表とVLOOKUPで管理する、途中列で役割を分ける、あるいはIFSやSWITCHで書き方だけでも整理する。どの方法を選ぶにしても、大事なのは「今動けばいい」で終わらせず、「半年後の自分や、引き継ぐ人が読めるかどうか」まで想像しておくことです。
まずは冒頭の3つの質問に戻って、今抱えている式がいくつ「はい」と答えられるか、あらためて確認してみてください。1つでも「いいえ」があるなら、そこが分解の第一歩を踏み出すタイミングです。
なお、Excelを自分しか扱えない状態にしてしまっていないか気になる方は、自分しか触れないExcelを引き継げる形にする考え方もあわせて読んでおくと、今回の話とつながる部分が多いはずです。

今回は「なぜネストが増えるのか」「どう分解するか」という基本の考え方を、実際にあった経費精算表の事例とあわせて整理しました。ただ、いざ置き換えようとすると、「どの道具を選ぶか」と「書き換えた式が元と同じ結果を返すか」で手が止まりがちです。置き換え先を決める判断の流れと、境目の値で結果を確かめるテスト表の作り方は、もう一歩踏み込みたい方向けにIFのネストを壊さずに置き換える手順(note)にまとめています。


コメント