Why nested logic matters in real reports
Business rules are rarely a single yes or no. A deal is A, B, or C tier. A shipment is on time, late, or failed. IF handles two outcomes; once you need three or more, a raw nested IF gets hard to read and easy to break. IFS was built for exactly that. In my experience, a clean IFS formula is faster to audit than a five-level nested IF, and auditors trust it more because the order of tests is visible at a glance.
A common mistake is building a nested IF where the brackets don't balance. One missing parenthesis and the whole column returns #VALUE. I recommend starting with IFS for multi-tier rules so you avoid the bracket maze entirely.
IF: the basic true or false test
On Sales, Total is in column C. Type =IF(C2>1000,"Big","Small") to label deals above 1000 as Big and everything else Small. The first part is the test, the second is the true result, the third is the false result.
IF can return values you calculate. =IF(C2>1000,C2*0.1,0) gives a 10 percent bonus only for big deals, and 0 otherwise. Keep both branches the same type so downstream =SUM works cleanly.
Empty rows cause false hits. Use =IF(C2="","",IF(C2>1000,"Big","Small")) so blank Total cells return blank instead of "Small". This keeps your filtered view honest.
I recommend returning the same data type on both branches. If the true side is text and the false side is a number, sorting and =SUM later behave strangely. A common mistake is mixing "0" as text with 0 as a number, which breaks totals silently.
IFS: multiple branches without nesting
Instead of =IF(C2>5000,"A",IF(C2>1000,"B","C")), write =IFS(C2>5000,"A",C2>1000,"B",C2>0,"C"). Each pair is a test and a result. IFS stops at the first true test, so order matters.
Put the highest threshold first. =IFS(C2>5000,"A",C2>1000,"B") works because a 6000 value hits A and stops. If you reversed it, 6000 would match the >1000 test first and wrongly become B. This will break if you forget the order.
End with TRUE as the final test so anything unmatched gets a label. =IFS(C2>5000,"A",C2>1000,"B",TRUE,"C") ensures no row returns #N/A. I use TRUE as a safety net on every IFS.

When you still need a nested IF
A deal is "Priority" only if Region is "West" and Total over 2000. Use =IF(AND(D2="West",C2>2000),"Priority",""). AND bundles multiple tests inside one IF branch.
Flag a deal if it is big OR late: =IF(OR(C2>5000,F2>NETWORKDAYS(B2,E2,0)),"Check",""). OR returns true if any test passes. Keep the logic to two OR tests so the formula stays readable.
You can put AND inside IFS pairs: =IFS(AND(C2>5000,D2="West"),"Key",C2>0,"Std"). This labels key accounts precisely while keeping one clean formula per row.
A common mistake with nested IF is mismatched parentheses. Count your open and close brackets; Excel highlights them as you type. If a column returns #VALUE, click the cell and check the colored pairs before anything else.
Worked example on the Orders table
With OrderDate in B, ShipDate in F, and a 3-working-day SLA, =IFS(F2="","Not shipped",F2<=B2+3,"On time",TRUE,"Late") classifies every row. Blank ships show as not shipped, not late.
On Sales, =IFS(C2>5000,0.15,C2>2000,0.1,C2>500,0.05,TRUE,0) sets the discount rate by deal size. A $6,200 deal gets 15 percent; a $300 deal gets 0. SUM the result column for total discount given.
Combine with TEXT for a readable note: =IFS(C2>5000,"Approve",AND(C2<500,F2=""),"Chase",TRUE,"Standard"). Managers scan the flag column instead of reading raw numbers.

Common mistakes that break IF and IFS
If the first test is too loose, later tests never run. =IFS(C2>0,"C",C2>5000,"A") always returns C for positive values. Put the strictest threshold first or the tiers will collapse.
IFS with no TRUE at the end returns #N/A for unmatched rows. That error propagates into =SUM and charts. Always end with a TRUE pair, even if it just returns "Other".
If Total is stored as text from a CSV, =IF(C2>1000,...) compares text to a number and returns wrong results. Convert the column to numbers first, or C2 will never exceed 1000 as text.
When to use another tool instead
For grouping and aggregation, SUMIFS and COUNTIFS often beat long IF chains. If your only goal is to count deals by tier, =COUNTIFS(C:C,">1000") is simpler than tagging each row. For rules that come from a lookup table, a VLOOKUP or XLOOKUP tier table is easier to maintain than editing formulas. I reach for IF and IFS when the logic is genuinely row-by-row; I reach for lookup and summary functions when the pattern repeats. Our guide on SUMIFS and COUNTIFS deep dive covers the counting side.
A tier-assignment scenario you can copy
Take a Sales table where the Total column holds deal values from $300 to $9,800 and the Region column holds West, East, or South. You need a Tier label so the team routes big deals to senior reps. Build =IFS(C2>5000,"A",C2>2000,"B",C2>500,"C",TRUE,"D") and the $9,800 deal becomes A while the $300 deal becomes D. The TRUE at the end catches anything under $500 so no row returns #N/A.
Once the formula is in the first row, press Ctrl+D to fill it down the whole column. I recommend you then scan the boundary rows: a $5,000 deal should land in A, not B. Because IFS stops at the first true test, the order of your thresholds decides the outcome, so always read the formula top to bottom before trusting it on a live report.
Real routing often needs two conditions. A deal is "Key" only when it is large and in the West region. Write =IFS(AND(C2>5000,D2="West"),"Key",C2>1000,"Std",TRUE,"Watch"). The AND bundles the size and region into one test, and the lower rules handle the rest. Keep AND to two or three conditions so the logic stays readable for the next person who opens the file.
A mistake that costs hours is mixing result types. If the true branch returns the number 0 and the false branch returns the text "None", a later =SUM on the column ignores the text and undercounts. I have watched a commission total come up short by exactly the count of "None" rows. Decide one type per column and stick to it; text for labels, numbers for amounts.
When the same tiers must also be counted, don't re-tag rows by hand. Use =COUNTIFS(C:C,">5000") to tally A deals straight from the Total column. IF and IFS build the readable label; COUNTIFS builds the summary. Together they give you a dashboard that updates the moment a new deal lands. See our guide on SUMIFS and COUNTIFS deep dive for the counting side of the same logic.
Edge cases are where IF and IFS earn their keep. Consider a deal that is refunded: its Total may be negative or zero, and your tier rule should route it to a Refund label rather than a sales tier. Add that test first: =IFS(C2<=0,"Refund",C2>5000,"A",C2>2000,"B",TRUE,"C"). Because the negative check sits at the top, a -$200 deal never reaches the A-through-C logic. I recommend listing exceptional cases, like refunds, voids, or test orders, above the normal tiers so they are caught before the happy-path rules run. This ordering discipline is the difference between a formula that looks right and one that is right under every input the real data throws at it.
When you inherit a spreadsheet full of nested IFs, resist the urge to rewrite everything at once. Start by adding an IFS version in a helper column and compare it row by row against the old output for a few hundred rows. If they match, you can replace the original with confidence. This side-by-side check has saved me from shipping a cleaner formula that quietly changed fifty edge-case results and cost a week of trust.
I recommend writing the tier logic once in IFS and then rolling it up with a summary, rather than re-tagging rows by hand each month. On the Sales table, point =COUNTIFS at a criteria cell so =$G$1 holding >5000 tallies the A deals, and =SUMIFS adds their Amount. A common mistake is mixing a text None result with a 0 number, which makes a later =SUM ignore those rows and undercount commission by exactly the count of None rows. I always pick one type per column before I fill it down.
Quick reference and next steps
Keep the pattern: IF for two outcomes, IFS for many, order tests strictest first, end IFS with TRUE. Practice on the Sales table with Total and Region, then the Orders table with order and ship dates. Once these are automatic, wrap them in SUMIFS so your tiers roll up into a dashboard that updates on its own.


