Your business, as a function.

Excel LAMBDA programming that captures your rules in documented, reusable functions, so your spreadsheet becomes the custom software your organization deserves.

problem,

Where do your business rules live right now?

Scattered across dozens of formulas in dozens of places. Chained together so tightly only an AI assistant can figure it out. Locked in the head of the one person who knows why the numbers come out the way they do.

Change a rate, and you’re hunting for every place it hides. Copy the workbook for a new year, and the rules start to drift.

The bottom line: Your rules are the most valuable thing in your spreadsheet. They’re also the least protected.

bookends,

Two bookends. One library.

Every spreadsheet I build answers three questions. Two tools answer the questions on the ends, and they hold your data between them like bookends on a shelf.

Power
Query
tblCustomers
tblOrders
tblInvoices
lstRates
lstRules
lstProducts
lstEmployees
lstTargets
λ LAMBDA
Where does it come from?

Power Query

Imports, cleans, and moves your data, putting it exactly where it needs to be.

What data is needed?

Your Excel database

Structured tables holding every record, every list, and every rule. The books on the shelf.

What do you need to do with it?

LAMBDA

Turns that data into decisions, reports, and exports, by your rules, every time.

logic,

Your logic, respected and protected.

Every organization has its own way of doing things. Its own pricing. Its own exceptions. Its own judgment calls. Its own data flow. That’s the first thing I use LAMBDA for: capturing that logic in one place, so it’s applied the same way every time.

documented

Written down, inside the formula

Every long LAMBDA carries plain-English notes in the formula itself. You can confirm the logic matches your business. Next year, whoever edits it can see exactly what it does and why.

every_path

Every decision, in one place

Dozens of variables and long decision trees fit in a single function. Every rule, exception, and pathway is defined once, not scattered across a workbook.

open_box

A black box you can open

To most users it’s a black box: inputs go in, the right answer comes out, and nothing gets in the way. But it’s never locked. Anyone can open it and follow every step.

1=LAMBDA(Width, Length, WidthsPerPair, Panels, DoubleRod,
2LET(
3 Notes, “Install cost: a base cost that rises with curtain width,
4 plus a length cost (finished length x widths per pair),
5 plus a double-rod fee, if needed. Each coupled panel
6 beyond two adds a 15% premium to the base. Total is
7 marked up for labor, adjusted for this job’s premium or
8 discount, and rounded to the nearest $10.”,
9 Base, XLOOKUP(Width, tblInstall[MaxWidth], tblInstall[BaseCost], , 1),
10 Premium, 1 + MAX(0, Panels – 2) * 15%,
11 LengthCost, Length * WidthsPerPair * LengthRate,
12 RodFee, IF(DoubleRod, XLOOKUP(Width, tblRod[MaxWidth], tblRod[Fee], , 1), 0),
13 Total, (Base * Premium + LengthCost + RodFee) * (1 + LaborMarkup) * JobAdjustment,
14 MROUND(Total, 10)
15))

A simplified excerpt from a curtain pricing tool. The note at the top states the rule in plain English. The client can confirm it. Whoever maintains it next year can follow it.

reports,

One formula. The whole report.

The second thing I use LAMBDA for is reporting. Not a pivot table. Not a template someone fills in by hand. One formula that builds the entire report, then rebuilds it every time the data changes.

B4
=Report_Assembly(rptSummary, COLUMNS(B:P)-COLUMNS(rptSummary)+4)
Prior
Actual
Current
Expected
Current
Budget
Next
Budget
Notes
North Region
Income
Primary Revenue
4010Sales1,240,0001,315,0001,300,0001,380,000
4020Subscriptions186,000214,000205,000236,000Price increase in March
Total Primary Revenue1,426,0001,529,0001,505,0001,616,000
Other Income
4210Advertising42,50047,80045,00049,000
4500Interest Income3,9005,2004,5004,800
Total Other Income46,40053,00049,50053,800
Total Income1,472,4001,582,0001,554,5001,669,800
Expense
Contracted Services
5510Landscape Contract66,00066,00066,00061,000New vendor, 3-year contract
5530Security Contract58,40064,40066,00066,000
Total Contracted Services124,400130,400132,000127,000
Utilities
5205Electricity284,000278,000240,000289,000Rate up 4% in July
5225Water and Sewer168,000171,000165,000176,000
Total Utilities452,000449,000405,000465,000
Total Expense576,400579,400537,000592,000
Surplus / (Deficit)896,0001,002,6001,017,5001,077,800
South Region …

Any number of regions. Recursive LAMBDAs loop through every region, category, and sub-category you have. Add one next year, and the report grows to fit.

Line-by-line control. A total for every category, totals for income and expense, the surplus line where it belongs, and blank rows that make it easy to read.

Notes where they matter. An explanation right beside the line it explains. PIVOTBY and GROUPBY can’t do that.

New reports, fast. Point the same function at a new dataset with the same structure, or take a different slice of this one. No new logic to write.

design,

Built to change without breaking.

Modular

Large LAMBDAs call smaller ones: a loop for subcategories, one step of a calculation, a piece shared by several reports, special pricing for a single item. Rewrite how one piece calculates its answer, and as long as it returns the same shape, everything that calls it keeps working.

fxCostToProduce_Curtains
├── fxTotalWidths
│ ├── fxRequiredWidth
│ └── fxUsableWidth
├── fxLaborCost_Curtains
│ └── fxTrimCost_Curtains
├── fxPoleCost
└── fxRingCost

Off the grid

Inputs are parameters. A LAMBDA doesn’t care where its data lives or where its answer lands.

=QuotePrice(A1)
$1,240
=QuotePrice(Quotes!GZV145997)
$1,240
=QuotePrice(tblOrders[@Item])
$1,240

Same function. Same answer. Wherever your data lives.

Mark Proctor calls it taking Excel “off the grid.” Christopher Fennell calls it going “beyond the CELL.” Either way, the worksheet stops being the point. The logic and the data are.

proof,

LAMBDA at work.

ManHourCalendar(Jobs, Period)

A holiday lighting company sees every booked job and man-hour by day or week. Two LAMBDAs build and stack the whole calendar. Read how it works

Valuation(Portfolio)

A main LAMBDA and its smaller functions value a portfolio of more than 1,000 properties, passing encoded results between sheets. Read how it works

BudgetCalc(GL, Month)

One LAMBDA forecasts every editable cell in a property management budget, and recursive LAMBDAs build every report. Read the case study

fxCostToProduce_Curtains(Curtain)

Fourteen named LAMBDAs price custom curtains: fabric yardage, labor, trim, installation, and hardware, each in its own documented function.

returns,

What it returns for you.

LAMBDA isn’t a separate service. It’s how I build every service. Here’s what that gives you.

Your spreadsheet, as your software

λ

Your business logic, captured in documented functions you own

λ

Reports that build themselves from a single formula

λ

A workbook that grows with you, without breaking

λ

VBA user-defined functions replaced with LAMBDA, where possible

λ

Training and mentoring, if your team wants to maintain it themselves

Retrofit or rebuild?

I’ll add LAMBDA to an existing workbook when that’s what the job requires. But I almost always recommend a rebuild. A rebuild can keep the look and feel your team already knows, which helps adoption, while putting a solid structure underneath.

questions,

Still curious?

What is Excel LAMBDA programming?

LAMBDA lets you write your own Excel functions, with names, inputs, and logic you define. Excel LAMBDA programming means building those functions around your business, so they work like native functions, right alongside SUM and XLOOKUP.

Can LAMBDA replace VBA?

For custom worksheet functions, usually yes, which often means your file can be a regular .xlsx instead of a macro-enabled one. VBA still has a place for automating actions, like importing files or sending email. I use each for what it does best.

Which versions of Excel support LAMBDA?

Excel for Microsoft 365 (Windows and Mac) and Excel 2024 (Windows and Mac). Excel 2019 and earlier can't run them. And with all the innovation Microsoft is bringing to Excel, Microsoft 365 is the only version I recommend.

When should I use Power Query instead?

Use Power Query to bring data in and shape it. Use LAMBDA to calculate and report on it. Most of my workbooks use both: one bookend each.

Do you offer LAMBDA training?

Yes. If your team wants to maintain or extend its own LAMBDAs, I'm happy to train or mentor them.

=LAMBDA(your_rules_and_data, LET(problem, …, bookends, …, logic, …, reports, …, design, …, proof, …, returns, …, questions, …,

It's time to turn your spreadsheet into your software))

Tell me how your business works. I’ll write it down, in a function, and build the spreadsheet around it.

=fxYourBusiness(you)