Dynamic array formulas are Excel expressions that automatically return and resize multiple results—known as a spill range—without requiring Ctrl + Shift + Enter.
Dynamic array formulas are a new calculation engine introduced in Microsoft Excel 365 and Excel 2021 that allows a single formula to return multiple values which automatically “spill” into adjacent cells. Unlike legacy array formulas that needed Ctrl + Shift + Enter, dynamic arrays recalculate and resize in real time as source data changes.
For years, analysts battled with complex legacy array formulas, manual range resizing, and volatile helper columns. Dynamic arrays modernize Excel’s grid by:
FILTER
, SORT
, UNIQUE
, SEQUENCE
, RANDARRAY
, TEXTSPLIT
) that dramatically reduce VBA or helper-column workarounds.When a formula returns multiple items, Excel places the first result in the formula cell and spills the remaining results into the cells below or to the right. The contiguous block is called the spill range. If any cell in the proposed range is blocked (non-blank, merged, or protected), Excel throws a #SPILL!
error.
Pre-dynamic-array formulas silently applied implicit intersection: they took the value from the same row or column and ignored the rest. With dynamic arrays, implicit intersection is deprecated (@
operator) and explicit spilling is the default.
The spill range is treated as a single unit. Editing any cell inside the range other than the anchor cell is disallowed. The engine recalculates only when precedents change, not on every sheet calc, keeping workbooks performant.
=FILTER(A2:D100, D2:D100 = "Closed")
returns only rows where status = Closed.
=SORT(A2:C20, 2, -1)
sorts by the 2nd column descending.
=UNIQUE(B2:B500)
lists distinct customer IDs without duplicates.
=SEQUENCE(12, 1, 1, 1)
generates 1–12 down a column—handy for calendar tables.
=RANDARRAY(10, 1, 0, 1, TRUE)
returns 10 normally distributed randoms.
Powerful text parsing: =TEXTSPLIT(A2, ", ")
spills each comma-separated token.
Suppose you have a sales table (Table1
) with columns Date, Salesperson, Region, Amount. You want a dashboard that always shows the latest 5 transactions, sorted by date descending.
=Table1[Date]
named DateCol
.G2
(or any anchor cell):=SORT(Table1, MATCH("Date", Table1[#Headers], 0), -1)
INDEX
to limit to 5 rows:=INDEX(SORT(Table1, MATCH("Date", Table1[#Headers], 0), -1), SEQUENCE(5), )
The result automatically resizes when new sales hit the table—no manual range updates.
#
suffix (SalesLast5#
) to create dynamic references in charts, data validation, and other formulas.UNIQUE(FILTER(...))
—to build declarative pipelines that replace multi-step manual processes.RANDARRAY
recalculates on every recalc, which may slow large models.#SPILL!
if space isn’t free.Ease of authoring: Type & press Enter.
Maintainability: Spill ranges self-document the shape; no cryptic {} braces.
Performance: The calc engine can parallelize spills, reducing calc time for large models.
You can nest spills inside spills, e.g. =SORT(UNIQUE(FILTER(A2:B100, B2:B100>1000)))
to create unique customer lists over a threshold and sort them.
Pair dynamic arrays with LAMBDA
to define reusable custom functions without VBA. Example:=LAMBDA(tbl, col, threshold, FILTER(tbl, INDEX(tbl,, col)>threshold))
stored as FilterByThreshold
.
Although Power Query is still the best tool for heavy ETL, dynamic arrays can perform lightweight transformations inline, keeping models inside the workbook when governance policies restrict PQ refreshes.
If you target users on Excel 2019 or earlier, dynamic arrays will throw #NAME?
. In those cases, fall back to Ctrl + Shift + Enter formulas or Power Query.
=OFFSET
replaced by INDEX(SEQUENCE())
.=UNIQUE
spills update automatically.SEQUENCE
simplify period-end logic.Dynamic arrays transform Excel from a static grid to a responsive calculation canvas. By mastering spill behavior, the new functions, and best practices, analysts can replace brittle, manual processes with clear, resilient formulas.
Dynamic arrays eliminate the need for legacy Ctrl + Shift + Enter formulas, automatically resize as data changes, and introduce powerful new functions that drastically reduce manual data wrangling. Mastering them makes spreadsheet models more scalable, performant, and maintainable—skills every data engineer or analyst must possess to build robust reporting pipelines.
No. Dynamic array formulas calculate with a simple Enter. Legacy CSE formulas are still supported for backward compatibility but are rarely necessary now.
#SPILL! means Excel couldn’t place the entire result set because the destination range has non-blank, merged, or protected cells. Clear or move the blocking content and recalc.
Add the #
suffix to the anchor cell reference—for example, =AVERAGE(D2#)
averages every cell in the spill.
Excel 365 (Windows, Mac, Web) and Excel 2021 perpetual. Excel 2019 or earlier do not support them.