Home › Data Analytics › Excel XLOOKUP Returns #N/A on Matches Fix
Beginner 6 min · September 23, 2026
Excel XLOOKUP Returns #N/A on Apparently Matching Values

Excel XLOOKUP Returns #N/A on Matches Fix

Normalize types and trim spaces to fix XLOOKUP #N/A on matches.

N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Written from production experience, not tutorials.

Follow
✓ Production
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
Before you start⏱ 11 min
  • ✓Excel with XLOOKUP (Microsoft 365 or Excel 2021+)
  • ✓Comfort writing basic lookups or VLOOKUP formulas
  • ✓A sample two-table workbook for practicing key probes
 ● Production Incident 🔎 Debug Guide
⚡Quick Answer
  • XLOOKUP #N/A on visibly matching values almost always means invisible mismatch: text numbers vs real numbers, or trailing spaces — not missing data
  • Diagnose in seconds: =A2=B2 returns FALSE on lookalikes, =LEN reveals extra characters, and =TYPE tells text (2) from numbers (1)
  • Normalize both sides identically with TRIM, CLEAN, VALUE or TEXT, then compare exactly; fix the data once rather than wrapping every lookup
  • Harden the formula with match_mode 0 for exact match and the if_not_found argument so genuine misses report cleanly instead of erroring
✦ Definition~90s read
What is Excel XLOOKUP Returns #N/A on Apparently Matching Values?

XLOOKUP is Excel's modern lookup function: =XLOOKUP(lookup_value, lookup_array, return_array, [if_not_found], [match_mode], [search_mode]). It searches a lookup column for a key and returns the corresponding entry from a return array — in any direction, with exact match by default, plus built-in miss handling.

★
Imagine a bouncer checking names against a guest list.

It replaces VLOOKUP's column-index fragility and approximate-match default with separate arrays and exact-first semantics.

#N/A is its honest answer when no exact twin exists — and 'exact' means exact in bytes and type. Text "1042" never equals number 1042; "1042 " with a trailing space never equals "1042"; CHAR(160) non-breaking spaces from web imports aren't spaces to TRIM.

Human vision normalizes all of these; XLOOKUP compares stored values, where every distinction is real. The diagnostic trio — equality probe (=A2=B2), LEN for hidden characters, TYPE for species (1 number, 2 text) — makes the invisible visible in seconds.

The argument set completes the toolkit: match_mode 0 pins exact identity (versus neighbor-returning approximate modes or pattern wildcards), search_mode sets scan direction over duplicates, and if_not_found labels genuine misses for gated workflows. Normalization helpers (TRIM, CLEAN, SUBSTITUTE, VALUE, TEXT) align both sides in staging columns, and Power Query promotes recurring hygiene to the import itself.

Exact keys, clean data, labeled misses — that combination ends phantom #N/A permanently.

Plain-English First

Imagine a bouncer checking names against a guest list. 'Jon Smith' with two spaces won't match 'Jon Smith' with one, and table '12' written in words won't match table 12 in digits — even though your eyes say they're the same. XLOOKUP is that strict bouncer: it compares exact characters and types, not appearances. #N/A means the bouncer found no exact twin, usually because of invisible spaces or text-versus-number disguises.

Your XLOOKUP returns #N/A but you can see the matching value right there in the lookup column. You copy-paste one onto the other and it still fails. VLOOKUP veterans reach for TRUE (approximate match) which 'fixes' it by returning wrong rows, and the mystery deepens.

Invisible mismatch causes nearly all of these. The lookup value is the text "1042" while the column holds the number 1042; the supplier code carries a trailing space; a non-breaking space from a web export poses as a normal one. Human eyes normalize all of these automatically. XLOOKUP compares bytes and types, and bytes don't lie.

The cost is reconciliation hell. Procurement matches fail on thousands of rows, payroll IDs miss, inventory counts disagree — all while both sides look complete. Teams burn days eyeballing lists that need byte-level comparison, or worse, force approximate matches that silently return neighbors instead of twins.

This article gives you the byte-level toolkit: TYPE and LEN diagnostics, TRIM/CLEAN/VALUE normalization, match_mode discipline, and the if_not_found safety net. Phantom mismatches become two-minute fixes with proof, not staring contests.

Why Lookalikes Don't Match: Types and Invisible Characters

Excel stores text "1042" and number 1042 as different species that render identically. XLOOKUP's default exact match compares species first: text never equals number, so the lookup fails before characters even matter. Imports are the usual smugglers — CSVs land codes as text, ERP exports as numbers, and both display the same digits.

TYPE() exposes species: 1 is number, 2 is text, 4 is logical, 16 is error. When =A2=B2 returns FALSE on twins, =TYPE(A2)&" vs "&TYPE(B2) names the split instantly. The fix aligns species with VALUE (text to number) or TEXT (number to text with a format), applied identically to both lookup and table sides. One-sided conversion just moves the mismatch.

Spaces are the second disguise. Trailing, leading, and double internal spaces break equality while staying nearly invisible; non-breaking spaces (CHAR(160)) from web content defeat TRIM entirely since TRIM only handles CHAR(32). LEN() reveals all of them: twins with different lengths harbor hidden characters, always.

The cleaning stack handles every layer: SUBSTITUTE for CHAR(160), CLEAN for non-printables, TRIM for leftover spacing. =TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) is the full decontamination for imported keys. Apply it in staging columns on both sides — never inside the XLOOKUP itself, where it hides dirt instead of fixing it.

Prove equality before looking up. The probe =CleanLookup=CleanTable must read TRUE on sample rows before the XLOOKUP can possibly work. That two-second check separates data problems (probe FALSE) from formula problems (probe TRUE, lookup still fails) with total reliability.

EXCEL
1
2
3
4
5
=A2=B2                    // FALSE on lookalikes = invisible mismatch
=LEN(A2)&" vs "&LEN(B2)   // different lengths hide characters
=TYPE(A2)&" vs "&TYPE(B2) // 1=number, 2=text: species split
=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))
=VALUE(A2)                 // text digits -> real number
📊 Production Insight
The equality probe plus LEN/TYPE takes ten seconds and ends every staring contest — teams that probe first escalate missing-data claims ten times less often.
🎯 Key Takeaway
Lookalikes fail on species (text vs number) or hidden characters — probe with =A2=B2, expose with LEN/TYPE, clean both sides identically.

TRIM, CLEAN, VALUE, and TEXT: The Normalization Toolkit

TRIM strips leading, trailing, and collapsed internal spaces (CHAR(32) only). CLEAN removes non-printable characters (codes 0-31) that ride along in system exports. SUBSTITUTE swaps the stubborn ones TRIM can't touch, notably CHAR(160) non-breaking spaces from web pages and CHAR(202) from some ERP pads. Stack all three for imported keys; TRIM alone is half a job.

VALUE converts text digits to numbers, failing loudly on true text — that failure is useful information, flagging values that were never numeric. TEXT converts numbers to text under an explicit format like "0000" for zero-padded codes, where VALUE would destroy the padding. Choose the direction that preserves business meaning: quantities go VALUE, identifiers go TEXT.

Case rarely matters (lookups are case-insensitive by default) but consistency still helps auditing — UPPER both sides when eyeball comparison matters for reviews. Wildcard characters (* ? ~) matter enormously in match_mode 2, where they're operators, not literals; escape with ~ or avoid wildcard mode for code matching entirely.

Normalize in staging columns, not nested inside XLOOKUP. Visible cleaned columns are auditable, reusable across many lookups, and testable with the equality probe. Nested cleaning inside each formula duplicates logic per lookup, hides dirt from review, and guarantees the next analyst re-discovers the same grime.

For recurring imports, move normalization into Power Query: typed columns, trim transforms, and error tables run on every refresh automatically. One-time cleaning fixes today's file; query-based cleaning fixes every future file. The procurement incident ended with a validating template, not a heroic cleanup.

EXCEL
1
2
3
4
5
// Staging-column normalization (both sides, identically):
=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))
=TEXT(VALUE(B2),"0000")   // zero-padded codes as true text
// Then look up the CLEAN columns, never the raw ones:
=XLOOKUP(CleanKey, CleanTable, ReturnCol, "CHECK", 0)
📊 Production Insight
Nested cleaning inside XLOOKUP hides dirt from review; staging columns make hygiene visible, testable, and reusable across every lookup.
🎯 Key Takeaway
Stack SUBSTITUTE-CLEAN-TRIM for imports, align species with VALUE/TEXT by meaning, and normalize in staging columns both sides.

match_mode and search_mode: Saying Exactly What You Mean

XLOOKUP's fifth argument match_mode selects comparison semantics: 0 exact (the default you should usually pin explicitly), -1 exact-or-next-smaller, 1 exact-or-next-larger, 2 wildcard. Approximate modes (-1/1) require sorted data and return neighbors — correct for tiered pricing, catastrophic for identity matching where a neighbor is simply a wrong row.

Pin 0 for every identity lookup even though it's the default. Explicit 0 documents intent, survives readers who misremember defaults, and blocks the 'helpful' colleague from switching to approximate when mismatches appear. The procurement overpayment started with exactly that well-meaning switch.

Wildcard mode (2) serves pattern searches — "SKU--WEST" — but treats ? ~ as operators, so literal codes containing them need ~ escapes or they match unexpectedly broadly. Never use wildcard mode for exact code identity; its flexibility is a liability where twins are required.

search_mode (sixth argument) picks scan direction: 1 first-to-last (default), -1 last-to-first for latest occurrences, 2/-2 binary search on sorted data for speed. Duplicated keys plus default search return the first match silently — decide whether first, last, or deduplication is correct, and state it. Silent first-match on dirty duplicates is another quiet wrong-row source.

The hardened signature for identity lookups reads: =XLOOKUP(key, lookup_col, return_col, "FLAG", 0, 1). Labeled misses, exact matching, predictable direction — every argument earning its place. Anything looser needs a comment justifying why.

EXCEL
1
2
3
4
5
=XLOOKUP(A2, Codes, Prices, "CHECK CODE", 0, 1)
// args: key, lookup array, return array,
//        if_not_found, match_mode 0=exact, search_mode 1=first
=XLOOKUP(A2, Codes, Prices, , 2)   // wildcard: patterns only
=XLOOKUP(A2, Codes, Prices, , -1)  // next-smaller: sorted tiers
📊 Production Insight
Approximate mode as a 'fix' for #N/A converts visible errors into invisible wrong rows — the costliest possible trade, made with one keystroke.
🎯 Key Takeaway
Pin match_mode 0 for identity, reserve -1/1 for sorted tiers, wildcard for patterns — and never approximate away a mismatch.

if_not_found and Control Checks: Missing Data With Dignity

The fourth argument if_not_found converts genuine misses from errors into labeled flags: =XLOOKUP(key, col, ret, "CHECK CODE", 0) marks true absences while normalized matches flow through. Reviewers see a to-do list instead of a wall of #N/A, and downstream SUMs don't inherit error contagion. IFNA wrappers on older patterns achieve the same; if_not_found is simply built in.

Distinguish flags from failures with control counts. =COUNTIF(ResultCol, "CHECK CODE") must hit zero — or match an approved exception list — before money workflows run. That single gate cell, conditionally formatted red, turns the workbook from a calculator into a controlled process. The incident's PO run would have halted on 2,300 flags instead of pricing at list.

Never default misses to zero or list price silently. IFNA(XLOOKUP(...), 0) on a price lookup manufactures $0 costs; defaulting to list manufactures overpayments. Missing data is information demanding a decision, and the formula's job is to force that decision visibly, not to smuggle in a convenient substitute.

Exception lists handle the legitimate misses: discontinued codes, new SKUs pending pricing, intercompany quirks. Maintain them as a Table the control check consults — flagged-but-approved rows pass, unapproved flags block. Process maturity lives in that list, not in looser matching.

Test the gate with a deliberate break: corrupt one test key, confirm the flag appears and the control count reddens. Untested gates are decoration. A quarterly five-minute drill keeps the control honest and the team practiced.

EXCEL
1
2
3
4
=XLOOKUP(A2, Codes, Prices, "CHECK CODE", 0, 1)
=COUNTIF(D:D, "CHECK CODE")   // gate cell: must be 0 to run
=IF(GateCell=0, "READY", "BLOCKED: review flags")
// Never: =IFNA(XLOOKUP(A2,Codes,Prices), 0)  // hides misses
📊 Production Insight
A gate cell counting labeled misses converts 2,300 silent overpayments into one red BLOCKED indicator nobody can miss.
🎯 Key Takeaway
Flag genuine misses with if_not_found, gate money runs on a zero-flag count, and never default misses to convenient values.

Power Query: Fixing Imports So Lookups Never Break

Recurring #N/A epidemics trace to imports, so fix the import, not each lookup. Power Query (Data > From Table/Range, or From Text/CSV) applies typed columns, trim/clean transforms, and error tables on every refresh — the workbook lands clean while the raw file stays dirty. One query replaces a hundred staging formulas.

Set column types deliberately at import: codes as text (preserving leading zeroes CSVs love to eat), quantities as numbers, dates as dates. Type discipline at the gate ends the text-vs-number species split before any lookup runs. A code column that arrives numeric this week and textual next week is a WAVE of #N/A; declared types hold the line.

Add trim and clean as explicit steps so reviewers see hygiene in the Applied Steps pane. Replace CHAR(160) with a replace-values step targeting the non-breaking space. Route conversion errors to review: rows VALUE can't parse are data-quality tickets, not lookup failures — handle them upstream where context lives.

Merge in Power Query for heavy recurring matches. A query-level merge with join kind and match diagnostics outperforms thousands of XLOOKUPs on large tables and centralizes the key logic in one auditable place. Keep XLOOKUP for ad-hoc sheet logic; promote recurring production matching into the query.

Version the query alongside the template. When vendors change formats — new padding, new codes, new delimiters — update the transform once and every consumer inherits the fix. Import hygiene compounds; per-formula cleaning merely copes.

EXCEL
1
2
3
4
5
// Power Query (M) hygiene pattern for key columns:
// = Table.TransformColumns(Source,
//     {{"SupplierCode", each Text.Trim(Text.Clean(_)), type text}})
// = Table.ReplaceValue(_, Character.FromNumber(160), " ",
//     Replacer.ReplaceText, {"SupplierCode"})
💡Clean at the Gate, Not at the Lookup
Every recurring import deserves a Power Query with declared types, trim/clean steps, and CHAR(160) replacement. Fixing hygiene once at import beats cleaning inside a hundred XLOOKUP formulas — and it holds through every future refresh.
📊 Production Insight
Query-level hygiene turns vendor format changes from workbook-wide #N/A epidemics into single-step transform updates.
🎯 Key Takeaway
Promote recurring import cleaning into Power Query with declared types; reserve XLOOKUP for ad-hoc logic on already-clean data.

XLOOKUP Migration Habits for VLOOKUP Veterans

XLOOKUP defaults to exact match — the opposite of VLOOKUP's approximate default that burned generations of analysts. Migration removes an entire error class by construction, but veterans carry muscle memory: adding TRUE-style thinking, column-index counting, and left-lookup workarounds that XLOOKUP obsolete. Unlearn deliberately.

Column indexes were VLOOKUP's fragility: inserting a column shifted every index silently. XLOOKUP's separate lookup and return arrays survive structural edits — insertions break nothing because no positional counting exists. Migrate high-churn sheets first, where this robustness pays immediately.

Leftward lookups, impossible for VLOOKUP, work natively: return arrays sit anywhere relative to lookup arrays. Consolidate the old CHOOSE/INDEX-MATCH scaffolding into direct XLOOKUPs during migration, deleting complexity rather than translating it. Simpler formulas audit faster.

Keep a migration checklist per workbook: replace VLOOKUPs one sheet at a time, pin match_mode 0, add if_not_found flags, normalize key columns, and reconcile row counts before/after. Migrate with the gate discipline in this article and each sheet emerges cleaner than its VLOOKUP ancestor.

Teach exact-first thinking to the team. New analysts who learn XLOOKUP before VLOOKUP never develop approximate-by-default instincts — the kindest onboarding gift a spreadsheet culture can give. Defaults shape culture; exact defaults shape careful culture.

📊 Production Insight
Sheets migrated VLOOKUP-to-XLOOKUP with pinned exact mode and miss flags emerge strictly cleaner — migration is the cheapest audit most teams ever run.
🎯 Key Takeaway
XLOOKUP's exact default, edit-proof arrays, and native leftward lookup obsolete VLOOKUP workarounds — migrate sheet by sheet with gates.
● Production incidentPOST-MORTEMseverity: high

The $340K Procurement Match That Missed on Spaces

Symptom
The quarterly price-refresh workbook showed #N/A on 2,300 of 9,000 supplier-code lookups, despite every flagged code being visibly present in the vendor price file. Purchasing, assuming missing coverage, raised POs at list price — a $340K overpayment run-rate — while the contract prices sat one invisible space away in the same file.
Assumption
Analysts assumed the vendor file was incomplete and chased the supplier for 'missing' codes for a week. Spot-checks compared visible strings that matched, reinforcing the missing-data theory. Nobody tested type or length because both columns displayed identically, and the escalation focused on vendor completeness rather than data hygiene.
Root cause
Double mismatch: the ERP export stored codes as numbers (1042) while the vendor CSV stored text with trailing spaces ("1042 "). XLOOKUP's exact comparison failed on type first and would have failed on the space second. A =A2=B2 probe returned FALSE on visually identical cells, but nobody ran that probe until week two.
Fix
The team normalized both sides with TRIM(CLEAN()) plus VALUE/text alignment in staging columns, re-ran the lookup with match_mode 0 and an if_not_found flag reading 'CHECK CODE', and reconciled 100% match before re-pricing. The vendor template now validates code format on receipt, and the workbook rejects un-normalized inputs with a TYPE/LEN control check that blocks the PO run on any mismatch.
Key lesson
  • Visibly identical is not exactly equal — a =A2=B2 probe plus LEN/TYPE checks must precede any missing-data escalation.
  • Dual mismatches (type plus spaces) defeat single fixes, so normalize fully (trim, clean, type-align) before concluding anything about coverage.
  • Gate money workflows on match-rate controls: any unmatched row must halt the run with a labeled flag, never default to list price silently.
Production debug guideFive probes in the order that convicts invisible mismatch fastest.5 entries
Symptom · 01
XLOOKUP #N/A although both values look identical
→
Fix
Run the equality probe in a helper cell: =A2=B2 where A2 is your lookup value and B2 the pasted table value. FALSE on lookalikes proves invisible mismatch. Follow with =LEN(A2)=LEN(B2) to expose extra characters and =TYPE(A2)=TYPE(B2) for text-vs-number splits (2 vs 1). Normalize the guilty side — TRIM/CLEAN for spaces, VALUE or TEXT for types — and re-run the probe until it returns TRUE before touching the XLOOKUP.
Symptom · 02
Some rows match while others #N/A in the same column
→
Fix
The column mixes types or carries sporadic dirt: numbers where text was expected, trailing spaces on some rows. Add helper columns with =TYPE and =LEN beside the lookup column and filter for variety — the #N/A rows will cluster on one type or length. Normalize the entire column uniformly (VALUE where numeric, TRIM/CLEAN everywhere) rather than patching rows. Confirm with a match-rate count before re-running dependent reports.
Symptom · 03
Matches fail after a CSV, web, or ERP import
→
Fix
Imports inject non-breaking spaces (CHAR(160)), curly quotes, and text-typed numbers that native TRIM misses. Clean with =TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," "))) and align types explicitly. Better, rebuild the import through Power Query with declared column types and trim transforms so every refresh lands clean. Confirm by re-probing equality on previously failing rows.
Symptom · 04
XLOOKUP with wildcards or approximate modes returns wrong rows
→
Fix
Check match_mode and search_mode arguments: -1/1 approximate modes return neighbors, not twins, and wildcard mode (2) treats *?~ literally differently. For identity matching, pin match_mode 0 (exact) and search_mode 1 explicitly rather than relying on defaults. Confirm the fix returns the exact row on a three-case test: first-row, last-row, and genuinely-missing keys.
Symptom · 05
Genuine misses and dirty-data misses are indistinguishable
→
Fix
Add the if_not_found argument with a labeled flag: =XLOOKUP(key, col, ret, "CHECK CODE", 0). True misses now read CHECK CODE while dirty data still probes FALSE upstream. Build a control count of flagged rows that must hit zero (or an approved exception list) before money workflows run. Confirm the gate blocks a deliberately broken test row.
XLOOKUP #N/A Causes Compared
Root CauseHow to ConfirmFixPrevention
Text-vs-number type split=TYPE differs (1 vs 2); =A2=B2 FALSEAlign species with VALUE or TEXT on both sidesDeclare column types at import; TYPE control checks
Trailing spaces and hidden characters=LEN differs; CLEAN/SUBSTITUTE probe flips equalityFull stack: SUBSTITUTE 160, CLEAN, TRIM both sidesPower Query trim steps; vendor template validation
Wrong match_mode returning neighborsApproximate mode on unsorted identity keysPin match_mode 0 for identity; tiers only when sortedHardened lookup signature as team standard
Genuine missing keys treated as dirtProbes TRUE yet key absent from table entirelyif_not_found flags plus zero-flag gate before money runsException lists; quarterly gate drills with test breaks
⚙ Quick Reference
3 commands from this guide
FileCommand / CodePurpose
=A2=B2 // FALSE on lookalikes = invisible mismatchWhy Lookalikes Don't Match
=TRIM(CLEAN(SUBSTITUTE(A2,CHAR(160)," ")))TRIM, CLEAN, VALUE, and TEXT
=XLOOKUP(A2, Codes, Prices, "CHECK CODE", 0, 1)match_mode and search_mode

Key takeaways

1
Visibly identical is not exactly equal
probe with =A2=B2 before any other theory.
2
TYPE splits species (text vs number); LEN exposes hidden characters
run both probes.
3
Normalize fully on both sides
SUBSTITUTE 160, CLEAN, TRIM, then VALUE/TEXT by meaning.
4
Pin match_mode 0 for identity; approximate modes manufacture wrong rows, not fixes.
5
Flag misses with if_not_found and gate money runs on a zero-flag count.
6
Move recurring hygiene into Power Query so every refresh lands clean.

Common mistakes to avoid

5 patterns
×

Switching to approximate match to clear #N/A

Symptom
Errors vanish but rows return neighbors instead of twins — silent wrong prices everywhere.
Fix
Pin match_mode 0; diagnose the invisible mismatch with probes instead of approximating it away.
×

Cleaning only one side of the comparison

Symptom
TRIM on the lookup column alone still fails against dirty table keys — or vice versa.
Fix
Normalize both sides identically in staging columns; prove with the equality probe before lookup.
×

Nesting cleaning inside every XLOOKUP instead of staging it

Symptom
Duplicated logic per formula hides dirt from review and rots on the next edit.
Fix
Clean once in staging columns or Power Query; point all lookups at the cleaned keys.
×

Wrapping misses in IFNA(..., 0) on money lookups

Symptom
Missing prices become $0 costs or list-price defaults with no visible flag.
Fix
Use labeled if_not_found flags with a zero-flag gate cell that blocks money runs.
×

Eyeballing lists instead of probing equality

Symptom
Week-long missing-data escalations over data that was present but disguised.
Fix
=A2=B2 plus LEN/TYPE probes first — ten seconds that end every staring contest.
INTERVIEW PREP · PRACTICE MODE

Interview Questions on This Topic

Q01JUNIOR
XLOOKUP shows #N/A on values you can see in the table. First step?
Q02JUNIOR
What's the difference between TRIM and CLEAN, and what misses both?
Q03SENIOR
When is XLOOKUP match_mode -1 or 1 appropriate?
Q04SENIOR
How do you keep genuine misses from halting a workflow while staying saf...
Q05SENIOR
Design an import pipeline where XLOOKUP mismatches can't recur.
Q01 of 05JUNIOR

XLOOKUP shows #N/A on values you can see in the table. First step?

ANSWER
Equality probe: =lookup_cell=table_cell. FALSE proves invisible mismatch, then LEN exposes hidden characters and TYPE exposes text-vs-number splits. Normalize the guilty layer on both sides until the probe reads TRUE.
FAQ · 6 QUESTIONS

Frequently Asked Questions

01
Why does copy-pasting the table value over my key still fail?
02
Is XLOOKUP case-sensitive?
03
Should I use wildcards to fix mismatches?
04
Why do numbers from CSVs behave like text?
05
How do I find which rows failed in a 10,000-row lookup?
06
Can XLOOKUP return multiple columns at once?
N
Naren Founder & Principal Engineer

20+ years shipping production backend systems. Written from production experience, not tutorials.

Follow
✓ Verified
production tested
September 27, 2026
last updated
2,085
articles · all by Naren
🔥

That's Excel. Mark it forged?

6 min read · try the examples if you haven't

←
Previous
Excel Circular Reference Warning — Find and Break It
3 / 3 · Excel