経理・総務・営業事務を問わず、Excelで最も使用頻度が高い関数のひとつがIFです。「達成率が100%以上なら○、未満なら×」のような単純な分岐であれば迷うことはありませんが、判定条件が3つ、4つと増えてくると、IFの中にIFを入れ子にする「ネストIF」がどんどん複雑になり、後から見た自分自身でも数式の意味が分からなくなることがあります。この記事では、IFの基本からIFS・IFERRORとの使い分け、ネストIFが崩壊する原因までを実務目線で整理します。

IF関数の基本と、ネストが増える理由

IF関数は「条件」「条件が真の場合の値」「条件が偽の場合の値」の3つの引数を取るシンプルな関数です。

=IF(論理式, 真の場合, 偽の場合)

例:達成率(A1)が100%以上なら「達成」、それ未満なら「未達」と表示する
=IF(A1>=1,"達成","未達")

判定を「達成/未達」の2択ではなく「A評価/B評価/C評価/D評価」のように3段階以上に分けたい場合、偽の場合の引数にさらにIFを入れ子にする書き方が広く使われてきました。しかし4段階、5段階と条件が増えるたびに括弧がネストし、「)))」が並ぶ数式は書いた本人以外はもちろん、数ヶ月後の自分でも解読が困難になります。

IFS関数でネストを解消する

Excel 2019・Microsoft 365で使えるIFS関数を使うと、複数の条件を1つのIF入れ子ではなく、条件と結果のペアを横に並べる形で書けるため、可読性が大きく向上します。

=IFS(条件1, 結果1, 条件2, 結果2, ..., TRUE, それ以外の結果)

例:達成率(A1)を4段階評価する場合
=IFS(A1>=1.2,"S",A1>=1,"A",A1>=0.8,"B",TRUE,"C")

ポイントは条件を上から順に評価し、最初にTRUEになった時点の結果を返す点です。そのため条件は必ず範囲が狭いもの・厳しいものから先に書く必要があります。逆順に書くと、本来「S」評価になるべきデータが先に緩い条件に引っかかってしまい、常に同じ評価しか出なくなるというミスが起こります。

実務でのよくある使用シーン

総務担当者であれば、勤怠データから遅刻・早退・欠勤の状況を判定して表示する場面や、人事評価シートで点数に応じたランク分けを自動化する場面でIF・IFSがよく使われます。営業事務担当者であれば、受注金額に応じた値引き率の自動判定、達成率に応じたインセンティブ区分の表示などが典型例です。経理担当者であれば、取引先ごとの与信枠を超えていないかの判定、消費税率が複数存在する取引の税区分判定などにIFを組み合わせます。条件が2〜3個ならIF、4個以上ならIFSと使い分けると数式全体がすっきりします。

IF・IFS・IFERRORでよくあるエラー・トラブルと対処法

「この関数には引数が多すぎます」エラー

ネストしたIFの括弧の対応が崩れているときに出やすいエラーです。

  • 閉じ括弧の数が足りない、または多い
  • カンマの数え間違いで意図しない位置に引数が入ってしまっている
例:=IF(A1>=1,"達成",IF(A1>=0.5,"一部達成","未達") と閉じ括弧が1つ足りない

対処法として、数式バーで括弧をクリックすると対応する括弧が色分けされて表示されるので、ペアが揃っているか目視確認しましょう。ネストが3段階を超える場合は、素直にIFSへの書き換えを検討した方が事故が減ります。

IFSで#N/Aエラーが出る

IFSはIFと違い「それ以外」を自動で拾ってくれない仕様のため、想定漏れがあるとエラーになります。

例:=IFS(A1>=1,"達成",A1>=0.5,"一部達成") でA1が0.3の場合、どちらの条件にも合致せず#N/A

対処法は、最後の条件に必ずTRUEを指定し「それ以外の場合」の結果を明示しておくことです。=IFS(A1>=1,"達成",A1>=0.5,"一部達成",TRUE,"未達")のように書けば、どの条件にも当てはまらないデータが来てもエラーになりません。

数式全体がエラーで潰れてIFERRORで隠したいが原因も分からなくなる

IFERRORでエラーを一律に「-」や空欄に置き換えると、本来直すべき入力ミスまで見えなくなってしまうことがあります。

例:=IFERROR(VLOOKUP(A1,商品マスタ,2,FALSE),"-") と書くと、A1が空欄でも該当なしでも同じ「-」が表示される

対処法として、IFERRORは「エラーが出ても仕方がない・想定内」の場合にだけ使い、原因不明のエラーが多発する数式にはまず生のエラー表示のまま原因を特定してから導入するのが安全です。

初心者がつまずきやすいポイントとコツ

まとめ

IFはシンプルな2択判定に、IFSは3段階以上の判定に、IFERRORはエラー時の代替表示にと、それぞれ役割が異なります。ネストしたIFが読みにくくなってきたら無理に1つの数式に詰め込まず、IFSへの書き換えを検討しましょう。IFSを使う際は条件の順番と「それ以外」の受け皿(TRUE)を忘れないこと、IFERRORはエラーの原因を握りつぶしすぎないことがポイントです。数式を一から組み立てるのが不安な方は、下のツールで日本語の空欄を埋めるだけで数式を作成できます。

よくある質問

IFを何個もネストしたら「この関数には引数が多すぎます」と出ました。なぜですか?
IF関数は最大64個までネストできますが、実務でそこまで重ねることはほぼなく、多くの場合は括弧の対応ミスや引数の数え間違いが原因です。条件分岐が4つ以上になる場合は、ネストしたIFではなくIFS関数に置き換えると数式が読みやすくなり、この種のエラーも起きにくくなります。
IFSで全部の条件を満たさないと#N/Aエラーになるのはなぜですか?
IFS関数は、指定したどの条件にも一致しなかった場合に#N/Aエラーを返す仕様です。IFのように自動で「それ以外」を拾ってくれないため、最後の条件にTRUEを指定して「それ以外の場合」の処理を明示的に書いておく必要があります。
IFERRORとISERROR、何が違うのですか?
IFERRORはエラーが出たときの代わりの値を1つの関数で直接指定できるのに対し、ISERRORはエラーかどうかをTRUE/FALSEで判定するだけの関数です。ISERRORを使う場合はIF(ISERROR(数式),代わりの値,数式)のように数式を2回書く必要があり冗長になるため、単純にエラー時の表示を変えたいだけならIFERRORの方が数式が短くシンプルになります。

関連記事

→ IFの数式を作ってみる ← 記事一覧に戻る