Wauvel

Essential functions

Each one has its own page — what it is, a live demo, common errors, and better alternatives.

87 functions

Lookups & references

The modern lookup — find a value and return another, in any direction, with a clean not-found fallback.

=XLOOKUP("4100", Codes, Names, "Not found")
See it work → Excel fileAmateur

The everyday lookup — find a value in the first column and return one to its right.

=VLOOKUP("4100", A2:B4, 2, FALSE)
See it work → Excel fileAmateur

The classic two-step lookup — works left or right and across two dimensions.

=INDEX(Revenue, MATCH(A2, Month, 0))

The two-way lookup — cross a row label and a column label to pull one cell.

=INDEX(B2:D4, MATCH("East", A2:A4, 0), MATCH("Q2", B1:D1, 0))
See it work → Excel fileAdvanced

The horizontal lookup — find a value in the top row and return one below it.

=HLOOKUP("Q2", A1:E3, 2, FALSE)
See it work → Excel fileAmateur

The scenario switch. One cell flips a model between base, upside and downside.

=CHOOSE($B$1, 0.38, 0.41, 0.34) → the gross margin for the chosen scenario
See it work → Excel fileAmateur

Builds a reference out of text — which is how one summary tab reads twelve monthly sheets.

=INDIRECT("'"&A5&"'!B12") → B12 from the sheet named in A5
See it work → Excel fileAdvanced

Rolling windows — last 3 months, trailing twelve — and it's in every model you'll inherit.

=SUM(OFFSET(A1, COUNT(A:A)-12, 0, 12, 1)) → the last twelve values
See it work → Excel fileAdvanced

Excel inserts it when you click a pivot cell. Everyone has met it; nobody chose it.

=GETPIVOTDATA("Amount", $A$3, "Dept", A12, "Month", B11)

Logic & error handling

The workhorse of logic — return one thing when a test is true, another when it's false.

=IF(B2>=B3, "Hit target", "Missed")
See it work → Excel fileBeginner

Return different results by condition — IFS avoids nested IFs.

=IFS(B2>0,"Profit", B2=0,"Breakeven", TRUE,"Loss")
See it work → Excel fileAmateur

Turn errors into a clean fallback so a model doesn't break.

=IFERROR(A2/B2, 0)
See it work → Excel fileBeginner

Match one value against a list of cases — cleaner than a stack of nested IFs.

=SWITCH(B2, 1,"Open", 2,"Paid", 3,"Void", "Unknown")
See it work → Excel fileAmateur

Combine several conditions into one TRUE/FALSE — the logic that powers a real IF.

=IF(AND(B2>=650, C2>=50000), "Approve", "Review")
See it work → Excel fileAmateur

Ask what kind of thing is in a cell — empty, a number, text, or an error.

=IF(ISNUMBER(B2), B2, 0)
See it work → Excel fileAmateur

Catch only #N/A — so a missing lookup is handled but real errors still surface.

=IFNA(VLOOKUP(B2, Codes, 2, FALSE), "Not found")
See it work → Excel fileAmateur

Text & cleanup

Pull characters off the start, the end, or the middle of a text string by position.

=LEFT("AA-1024-X", 2)
See it work → Excel fileAmateur

Count the characters in a cell — the quiet workhorse behind validation and cleanup.

=LEN(A2)
See it work → Excel fileBeginner

Locate where one piece of text sits inside another — the position to slice at.

=FIND("-", "AA-1024-X")
See it work → Excel fileAmateur

Stitch pieces of text together — a full name, an address, a dynamic label.

=TEXTJOIN(", ", TRUE, A2:A6)
See it work → Excel fileAmateur

Grab everything before a delimiter — first names, street numbers, the local part of an email.

=TEXTBEFORE("Jane Doe", " ")
See it work → Excel fileAmateur

Grab everything after a delimiter — last names, email domains, the tail of a code.

=TEXTAFTER("Jane Doe", " ")
See it work → Excel fileAmateur

Break one messy cell into clean columns — split an address or a full name in a single formula.

=TEXTSPLIT("123 Main St, Austin, TX", ", ")

Strip stray spaces and junk characters so lookups match and lists de-duplicate.

=TRIM(" Jane Doe ")
See it work → Excel fileBeginner

Fix inconsistent capitalization — turn jane DOE and ACME llc into clean, uniform case.

=PROPER("jane DOE")
See it work → Excel fileBeginner

Find-and-replace inside a formula — standardize abbreviations and strip unwanted characters.

=SUBSTITUTE("123 Main St", "St", "Street")
See it work → Excel fileAmateur

Numbers that arrive as text don't sum — and the total quietly reads zero.

=NUMBERVALUE("1.234,56", ",", ".") → 1234.56
See it work → Excel fileAmateur

Excel's = ignores case. A reconciliation that treats INV-1 and inv-1 as the same can be quietly wrong.

=EXACT(A2, B2) → FALSE for "INV-1" vs "inv-1", where =A2=B2 says TRUE
See it work → Excel fileBeginner

SUBSTITUTE replaces what text says. REPLACE replaces where it sits.

=REPLACE("6100-200-01", 6, 3, "310") → "6100-310-01"
See it work → Excel fileAmateur

In-cell bar charts: one formula turns a variance column into something you can read at a glance.

=REPT("█", ROUND(B2 / MAX($B$2:$B$20) * 20, 0)) → bars scaled to 20 characters
See it work → Excel fileAmateur

Aggregation

Add up a range of numbers — the first function anyone learns and still the most-used.

=SUM(B2:B13)
See it work → Excel fileBeginner

The arithmetic mean of a range — total ÷ count, with blanks left out.

=AVERAGE(B2:B13)
See it work → Excel fileBeginner

Answer 'how many?' — numbers only, anything at all, or the empty ones.

=COUNTA(A2:A100)
See it work → Excel fileBeginner

The smallest or largest number in a range — and a neat way to cap or floor a value.

=MAX(B2:B13)
See it work → Excel fileBeginner

The 2nd, 3rd … nth smallest or largest — the top-N list MIN/MAX can't do.

=LARGE(B2:B13, 2)
See it work → Excel fileAmateur

Sum amounts that match several conditions — the workhorse of P&L roll-ups.

=SUMIFS(Amount, Account, "Revenue", Month, $B$1)
See it work → Excel fileAmateur

Count rows that meet multiple conditions.

=COUNTIFS(Status, "Open", Days, ">30")
See it work → Excel fileAmateur

Average the values that match several conditions — the mean sibling of SUMIFS.

=AVERAGEIFS(Amount, Stage, "Won")
See it work → Excel fileAmateur

The smallest or largest value that meets your conditions.

=MAXIFS(Balance, Customer, "Acme", Status, "Open")

Totals that carry on past an #N/A instead of letting one error poison the report.

=AGGREGATE(9, 6, C2:C200) → SUM, skipping error values

Customer concentration, top-N lists and ABC analysis — and ties are where it trips.

=RANK.EQ(B2, $B$2:$B$40) → 1 for the biggest customer
See it work → Excel fileAmateur

Average deal size gets dragged around by one whale. The median describes the business.

=MEDIAN(C2:C200) → the middle deal, ignoring how big the biggest was
See it work → Excel fileAmateur

Puts a number on how lumpy revenue is — the difference between a bad month and a signal.

=STDEV.S(B2:B13) → how much a typical month varies

Multiply arrays element-by-element, then sum — weighted averages and conditional math.

=SUMPRODUCT(Units, Price) / SUM(Units)
See it work → Excel fileAdvanced

Aggregate only the visible (filtered) rows, ignoring other subtotals.

=SUBTOTAL(9, D2:D500)

Math & rounding

Round a number to a set number of digits — control the pennies before they compound.

=ROUND(B2, 2)
See it work → Excel fileBeginner

Three small math tools that punch above their weight — magnitude, whole part, remainder.

=ABS(B2 - C2)
See it work → Excel fileAmateur

Round to a multiple — price points, pack sizes, round thousands — not to decimal places.

=CEILING.MATH(C2, 12) → 38 units becomes 48, four full packs
See it work → Excel fileAmateur

Dates

The current date (or date-and-time) that updates itself every time the sheet recalcs.

=TODAY() - B2
See it work → Excel fileBeginner

Build a real date from three numbers, or pull the year, month, or day back out.

=DATE(2026, 3, 15)
See it work → Excel fileAmateur

The last day of a month N months out — clean period-end dates.

=EOMONTH(TODAY(), 0)
See it work → Excel fileAmateur

The same day, N months out — clean anniversary, renewal, and due dates.

=EDATE(B2, 12)
See it work → Excel fileAmateur

Format a number or date as text — for labels and headers.

="Cash: " & TEXT(B2, "$#,##0")
See it work → Excel fileAmateur

Count working days between two dates — the unit aging, SLAs and close calendars are actually measured in.

=NETWORKDAYS("2026-09-01", "2026-09-30", Holidays)
See it work → Excel fileAmateur

Land a due date on a day someone can actually pay — terms counted in working days, not calendar ones.

=WORKDAY("2026-09-15", 30, Holidays) → net-30 on a working day
See it work → Excel fileAmateur

The fraction of a year between two dates — and the basis argument that quietly changes every accrual.

=YEARFRAC("2026-01-15", "2026-04-30", 2) → actual/360, as most bank debt is written

Whole months and years between two dates — the function Excel hides and never autocompletes.

=DATEDIF(InvoiceDate, TODAY(), "m") & " months old"
See it work → Excel fileAmateur

Two day counts that disagree on purpose — and DSO changes depending on which you use.

=DAYS(TODAY(), InvoiceDate) → calendar days an invoice has been outstanding

Every export arrives with dates as text. This is how they become dates again.

=DATEVALUE("2026-04-03") → the serial number for 3 April 2026
See it work → Excel fileAmateur

Cash timing is a day-of-week question — a Friday payment run clears differently to a Tuesday one.

=WEEKDAY(DueDate, 2) > 5 → TRUE when the due date is a weekend
See it work → Excel fileBeginner

Dynamic arrays (Microsoft 365)

Return the rows that meet a condition as a live, spilling result.

=FILTER(GL, Account="Revenue", "None")

Spill a distinct list — perfect for dropdowns and clean lists.

=SORT(UNIQUE(Account))
See it work → Excel fileAmateur

Spill a range into sorted order — live, with no manual re-sort.

=SORT(A2:B10, 2, -1)

Pile ranges on top of each other into one tall list — combine tabs or blocks before you filter or total.

=VSTACK(Jan!A2:C50, Feb!A2:C50, Mar!A2:C50)
See it work → Excel fileAmateur

Set ranges side by side into one wider block — glue separate columns into a single table.

=HSTACK(Months, Actuals, Budget)
See it work → Excel fileAmateur

The period headers every model starts with, as one formula that stretches.

=EOMONTH(Start, SEQUENCE(1, 12, 0)) → twelve month-end dates across

A pivot table as a formula — so it refreshes without anyone remembering to refresh it.

=PIVOTBY(Dept, Month, Amount, SUM) → departments down, months across
See it work → Excel fileAdvanced

Top ten customers, or everything except the header row, without hardcoding a range.

=TAKE(SORT(A2:B200, 2, -1), 10) → the ten biggest, always current

Pull specific columns out of an export, in the order your template wants them.

=CHOOSECOLS(Export, 3, 1, 7, -1) → four columns, in your order, last one included

Run a calculation down every row at once — no helper column.

=BYROW(B2:M40, LAMBDA(r, MAX(r))) → each account's best month
See it work → Excel fileExpert

SCAN is a running balance in one formula — which is the cash-forecast shape exactly.

=SCAN(Opening, Movements, LAMBDA(acc, v, acc + v)) → the running balance
See it work → Excel fileExpert

Name a value or calculation once, then reuse it — faster formulas that read like plain English.

=LET(rev, B2, cogs, B3, gp, rev - cogs, gp / rev)

Build your own reusable function — no VBA — then name it and call it like any built-in.

=LAMBDA(rev, cogs, (rev - cogs) / rev)(B2, C2)
See it work → Excel fileExpert

Finance

NPV and IRR for cash flows on real, irregular dates.

=XNPV(0.1, Flows, Dates)
See it work → Excel fileAdvanced

The level payment on a loan, per period.

=PMT(0.09/12, 60, -150000)

Build a full loan payoff schedule — principal vs. interest, month by month.

=IPMT(9%/12, 1, 60, -150000) → the first month's interest

Spread an asset's cost over its life — build an asset register and schedule.

=SLN(45000, 5000, 5) → $8,000 of straight-line depreciation a year

Fixed-declining-balance depreciation — accelerated, at a single rate Excel works out for you.

=DB(45000, 5000, 5, 1) → the first year's depreciation

Variable-declining balance — accelerated depreciation that switches to straight-line so nothing is stranded.

=VDB(45000, 5000, 5, 0, 1) → the first year's depreciation
See it work → Excel fileAdvanced

Value an evenly-spaced stream of cash and get its return — with the off-by-one that catches nearly everyone.

=A2 + NPV(10%, B2:F2) → today's outlay in A2, periods 1-5 in B2:F2

Split a loan payment into the interest half that hits the P&L and the principal half that pays the balance down.

=IPMT(6%/12, 1, 60, 150000) → the interest inside payment number 1

The two ends of time value: what a stream is worth today, and what a balance grows into.

=PV(8%/12, 36, -500) → what 36 monthly payments of $500 are worth today
See it work → Excel fileAmateur

Back the interest rate out of a deal you've already been quoted — the honest way to compare financing.

=RATE(36, -500, 15000) * 12 → the annual rate behind a 36-month plan

How many payments until this is paid off — the runway question, in loan form.

=NPER(9%/12, -1200, 45000) → months to clear $45,000 at $1,200 a month
See it work → Excel fileAmateur

Total the interest and principal across a range of periods — how interest expense actually gets budgeted.

=CUMIPMT(6%/12, 60, 150000, 13, 24, 0) → interest paid in year two
See it work → Excel fileAdvanced

Convert a quoted rate into the one you actually pay, and find out what an early-payment discount really costs.

=EFFECT(12%, 12) → 12.68%, the real cost of 12% compounded monthly

IRR's honest cousin — the return when you say what you'd really earn on the cash coming back.

=MIRR(A2:F2, 8%, 3%) → borrowed at 8%, proceeds earning 3%
See it work → Excel fileAdvanced

Learn the moves here — or let Wauvel run them on your numbers.

$99/mo, everything included. Free for 14 days, no card.

Meet your AI CFO →

One CFO-grade Excel tip a week

A short, practical email for finance operators — functions, shortcuts, and the moves that save an afternoon. Free, unsubscribe anytime.