
Excel LET & LAMBDA Performance Optimization and Modularization Guide
Environment: Based on Excel 365. AI tools were used as an aid in organizing the draft, but all formulas were reproduced directly.
Related Guides (7+ Internal Links)
1) Why LET and LAMBDA?
- Eliminate duplicate calculations — Store identical calculations in variables and run them only once
- Improved readability — Express logical steps with names
- Modularization — Reuse throughout the workbook with LAMBDA
// Before
=IFERROR(XLOOKUP(B2, Codes[Code], Codes[Rate]) * C2, 0)
// After (LET)
=LET(rate, XLOOKUP(B2, Codes[Code], Codes[Rate]), qty, C2, IFERROR(rate*qty, 0))
2) Six Performance Patterns (Ready to Copy and Paste)
/* ① Cache repeated lookups */
=LET(keys, Orders[Code],
rate, XLOOKUP(keys, Codes[Code], Codes[Rate]),
rate)
/* ② Eliminate intermediate spills (spill → variable) */
=LET(f, FILTER(Tbl, Tbl[Region]="Seoul"),
s, SUMIFS(f[Amount], f[Month], EOMONTH(TODAY(),0)),
s)
/* ③ Convert conditional branches to a table (SWITCH) */
=LET(g, [@Grade], SWITCH(g,"A",1.0,"B",0.9,"C",0.8,0.7))
/* ④ Sort a range only once */
=LET(s, SORT(Tbl, XMATCH("Amount", Tbl[#Headers]), -1),
TAKE(s, 10))
/* ⑤ Cache a text pipeline */
=LET(t, TRIM(SUBSTITUTE([@Text],CHAR(160)," ")),
parts, TEXTSPLIT(t, ","),
UNIQUE(parts))
/* ⑥ Encapsulate repeated calculations with LAMBDA */
=LAMBDA(qty,price, IFERROR(qty*price,0))(C2,D2)
3) 12 Reusable LAMBDA Templates (Save in Name Manager)
① RUNNING_TOTAL(range)
=LAMBDA(rng, SCAN(0, rng, LAMBDA(a,v, a+v)))
② NTH_OCCURRENCE(text, find, n)
=LAMBDA(t,f,n, TEXTAFTER(t, f, n))
③ MULTISPLIT(text, delimiters)
=LAMBDA(t,del, TEXTSPLIT(t, del))
④ CLEAN_TEXT(text)
=LAMBDA(t, LOWER(TRIM(SUBSTITUTE(t,CHAR(160)," "))))
⑤ UNIQUE_COUNT(range)
=LAMBDA(rng, ROWS(UNIQUE(rng)))
⑥ FISCAL_MONTH(date, startMonth)
=LAMBDA(d, sm, MOD(MONTH(d)-sm+12,12)+1)
⑦ MATCH_OR_BLANK(lookup, range)
=LAMBDA(x, rng, IFERROR(XMATCH(x, rng), ""))
⑧ SUMVISIBLE(range)
=LAMBDA(r, SUBTOTAL(109, r))
⑨ REGEX_SIM(mock) — Simple Pattern Replacement
=LAMBDA(t, SUBSTITUTE(SUBSTITUTE(t," "," "),"-",""))
⑩ TOPN(table, n, byColName, [desc])
=LAMBDA(tbl, n, col, desc,
TAKE(SORT(tbl, XMATCH(col, tbl[#Headers]), IF(desc, -1, 1)), n))
⑪ MERGE_HEADERS(T1,T2)
=LAMBDA(t1,t2, VSTACK(TAKE(t1,1), DROP(t1,1), DROP(t2,1)))
⑫ SAFE_DIV(num, den)
=LAMBDA(a,b, IFERROR(a/b, 0))
4) Mini Benchmark Tips
- Shorter formulas Keep only the essentials with LET variables
- Cache sorting/filtering Store SORT/FILTER results in variables
- Tables Use structured references to stay safe when columns move
- Calculation options Test large files with manual recalculation (F9)
5) Error and Maintenance Checklist
- Use clear LAMBDA argument names (lowercase English names recommended)
- Manage version numbers as suffixes in Name Manager (for example,
TOPN_v2) - If a spill conflict (#SPILL!) occurs, clear the range or unmerge cells
- Use IFERROR to provide user-friendly messages
Now combine the LAMBDAs above with VSTACK/HSTACK, TEXTSPLIT, and COUNTIFS to enhance your work templates.