TL;DR —
IFasks one yes/no question and returns one of two values:=IF(logical_test, value_if_true, value_if_false). Two things bite everyone. First, if you leave off the third argument, a false test returns the wordFALSE, not a blank — write,"")when you want empty. Second, stop nesting IFs past two levels: a tallIF(…IF(…IF(…)))pyramid is unreadable and a bracket-counting nightmare. For more than two or three branches, switch toIFS/SWITCHor a lookup table. Combine conditions withAND()/OR()inside the test — don't nest. Works in all versions.
=IF(B2>=60, "Pass", "Fail")
=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")
IF is the first function most people learn after SUM, and the one they
outgrow most slowly. It looks simple — and a single IF is simple — but the
trouble starts the moment you have a third or fourth outcome and reach for a
nested IF instead of the right tool. This guide is built around the mental model
that keeps IF honest, then the one rule that tells you when to stop.
What you'll learn
- The mental model:
IFis one fork in the road, nothing more - Why a missing
value_if_falsereturns the wordFALSE(and how to get a blank) - The nested-IF pyramid — why it collapses past two levels, and what to use instead
- Combining conditions with
AND/ORinstead of nesting - A surprise that breaks "my IF never runs":
IFtext compares ignore case - The modern move: one
IFthat spills down a whole column
The mental model: one fork in the road
An IF is a single junction. It evaluates one logical test — anything that
resolves to TRUE or FALSE — and sends the result down one of two paths:
' "Is the score at least 60? If yes, Pass; if no, Fail."
=IF(B2>=60, "Pass", "Fail")
That's the whole function. logical_test is the question; value_if_true and
value_if_false are the two roads. Hold that picture and most "IF problems"
turn out to be people trying to cram three, four, or seven outcomes through a
junction built for two. A fork has two exits. The instant you need a third, you
don't need a bigger IF — you need a different shape.
The rule that saves you: don't nest past two levels
You can put an IF inside an IF to get a third outcome, and a fourth, and a
fifth. Excel allows up to 64 levels. Almost none of them are a good idea.
' Three grade bands as a nested IF — already hard to read
=IF(B2>=90, "A", IF(B2>=80, "B", IF(B2>=70, "C", "F")))
Each new band adds a level of nesting and a closing parenthesis at the very end. By the time you have five or six, you're counting brackets to find where a branch lives, every edit risks an unbalanced paren, and a teammate reading it has to mentally unwind the whole stack. The information is all there — but the structure fights you.
The judgment call is blunt: two levels of nesting is the limit; past that,
change tools. For ordered numeric bands like grades, IFS
reads top-to-bottom with no pyramid. For mapping discrete values (a code to a
label), SWITCH or — better for anything that grows
or changes — a small lookup table with XLOOKUP is
far more maintainable. A long chain of nested IFs isn't clever; it's a
maintenance bill you're handing to whoever opens the file next.
The FALSE surprise: the third argument isn't optional in practice
value_if_false is technically optional. Omit it and Excel doesn't return a
blank — it returns the literal boolean FALSE:
=IF(B2>=60, "Pass") ' score 40 -> the cell shows FALSE
=IF(B2>=60, "Pass", "") ' score 40 -> the cell is blank
This is the single most common "why is my cell showing FALSE?" question, and the
fix is a habit: always supply the third argument. If you want nothing,
say so explicitly with "". Note the catch with "" though — it's an empty
string, not a truly empty cell, so a downstream ISBLANK reads FALSE and
COUNTA still counts it. If a later formula needs the cell to be genuinely
numeric-or-empty, return NA() or a number, not "".
Combine conditions with AND / OR — don't nest for that
A huge share of nested IFs exist only because someone needed two conditions
true at once and reached for the wrong shape. You don't nest for that — you
combine the tests inside logical_test with AND or OR:
' Nested (works, but harder to read and to edit)
=IF(B2>=60, IF(C2="Yes", "Pass", "Fail"), "Fail")
' AND — one clean test
=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail")
AND(…) is TRUE only when every test passes; OR(…) is TRUE when any one
does. They collapse a two-level nest into a single readable junction. Reserve
nesting for genuinely different downstream questions, not for "both of these
must be true" — that's AND's job, and it's the same logic you'll use in
SUMIFS and FILTER.
The case-insensitive surprise: "my IF never runs"
IF's = comparison ignores case. "Yes" = "yes" is TRUE to Excel, which
is usually what you want — until it isn't:
=IF(A2="OK", 1, 0) ' matches "OK", "ok", "Ok" — all of them
=IF(EXACT(A2,"OK"), 1, 0) ' matches only "OK" exactly, case included
When you genuinely need a case-sensitive test — matching a code like ID vs
id, or a checksum — wrap it in EXACT(). (This is the mirror image of VBA,
where = is case-sensitive by default; see
VBA UCase/LCase.) Knowing which side Excel defaults to
saves you from the baffling "the values look identical but my IF won't fire."
The modern move: one IF that spills down a column
In current Excel, IF accepts an array as its test and spills a result for
every row — no dragging, no copying a formula down:
=IF(Score>=60, "Pass", "Fail") ' Score is a range -> one result per row, spilled
Point the test at a whole column (a Table column or a # spill range) and a
single cell produces the entire result list, recalculating as the source grows.
For repeated sub-expressions inside a long IF, name them once with
LET so Excel computes them a single time — cleaner
to read and faster on big sheets.
The judgment call: IF vs IFS vs a lookup table
Use a plain IF for a true binary — one question, two answers. The moment you
have ordered bands (grades, tiers, thresholds), move to IFS: it reads like
the table it represents. For mapping a value to a label (status code →
description, region → manager), use SWITCH for a short fixed list, or an
XLOOKUP against a real lookup table once the list is long or changes over
time. The skill isn't writing bigger IFs — it's recognising, early, which of
these three shapes your problem actually is.
How ExcelMaster helps
Real logic is usually described in business terms — pass anyone scoring 60 or
more who also submitted, otherwise fail — not in formula syntax.
ExcelMaster turns that sentence into the right shape: a single IF with
AND when that's all you need, or a clean IFS/lookup when the problem has
outgrown a fork. You describe the decision; it picks the structure that won't
become a bracket-counting nightmare six months from now.
Frequently asked questions
Why does my IF formula show FALSE?
You left off the third argument. =IF(test, value_if_true) returns the literal
FALSE when the test fails. Add an explicit value_if_false: use ,"") for a
blank or , "No" for a label.
How many IFs can I nest in Excel?
Up to 64 levels — but readability collapses long before that. Keep nesting to
two levels at most; for more branches use IFS, SWITCH, or a lookup table.
How do I write an IF with multiple conditions?
Combine the tests with AND or OR inside the logical test, don't nest:
=IF(AND(B2>=60, C2="Yes"), "Pass", "Fail"). AND needs every test true; OR
needs any one true.
Is Excel's IF case-sensitive?
No. IF(A2="ok", …) matches "OK", "Ok", and "ok" alike. For a case-sensitive
comparison wrap it in EXACT: =IF(EXACT(A2,"OK"), …).
When should I use IFS instead of IF?
When you have three or more ordered outcomes (like grade bands). IFS lists each
test and result top to bottom with no nesting or trailing parentheses, so it's
far easier to read and edit.
Tested in
Tested in: Excel 365 (Windows 11) — last verified 2026-06-25.
Related guides: Excel IFS & SWITCH · Excel IFERROR · Excel SUMIFS · Excel FILTER
