What a Dynamic Array Actually Is

Before dynamic arrays, a formula returned one value to one cell. Now a formula can return a whole array, and Excel places the extra values in the cells around it automatically. That behavior is the spill. The formula cell holds the calculation; the cells it fills are the spill range, shown with a light blue border when you select the formula.

Excel sheet with a single FILTER formula cell and a blue-bordered spill range filling a table below it

The Spill Range and the # Spill Operator

The spill range is the set of cells a formula fills. You can reference the entire spill with the hash operator: if your formula is in B2, type B2# to mean all the spilled cells. This is how a chart or a SUM points at a result that changes size. Learn the # and you can build reports that resize themselves.

1
Find the formula cell

Click the cell with the dynamic array formula, like B2. Only this cell holds the calculation. The filled cells below are outputs you should not edit directly.

2
Reference the whole spill

In another cell type =SUM(B2#) to total the spilled block. The # tells Excel to grab every cell the formula spilled into, even as the count changes.

3
Feed a chart

Point a chart's data range at B2#. As the spill grows or shrinks, the chart follows. This avoids the old problem of a fixed range that cuts off new rows.

4
Check the blue border

Select the formula cell and look for the light blue outline around the results. That border is your visual proof of the current spill range and helps you spot what a report covers.

Common Ways to Reference a Spill

Once a formula spills, you rarely want to retype the range it filled. The # operator lets a total, a lookup, or a chart track the spill as it grows or shrinks. I keep every downstream formula pointed at the spill anchor so the report resizes on its own.

5
Total a spill

Write =SUM(B2#) beneath or beside a spilled block starting at B2. The # grabs all spilled cells, so the total updates the moment a row is added or removed from the source.

6
Look up inside a spill

Use =XLOOKUP("West", B2#, C2#) to find West in the spilled key column and return the matching value from the spilled result column. Both ranges use # so they stay aligned as the spill changes size.

7
Feed a chart

Set a chart's data range to B2#. As the spill grows with new data, the chart expands to include the extra points, which removes the old fixed-range cutoff problem completely.

The Functions That Spill

Several functions return arrays by design. FILTER returns matching rows, SORT reorders a range, SORTBY sorts by a hidden key, UNIQUE returns distinct values, SEQUENCE builds number and date series, and RANDARRAY makes random values. Each one can feed the next, so a single chain can replace a whole helper-column workflow.

8
Use FILTER to select rows

Write =FILTER(Sales, Sales[Region]="West", "none") to spill every West row. The returned block is a live spill you can sort or sum on top of.

9
Use SORT to reorder

Wrap with =SORT(FILTER(Sales, Sales[Region]="West","none"), 5, -1) to sort the West rows by the fifth column, Amount, descending. The inner spill becomes the input.

10
Use UNIQUE for distinct lists

Write =UNIQUE(Sales[Region]) to spill one row per region. Chain it with SORT when the list feeds a dropdown so the order reads cleanly.

11
Use SEQUENCE for series

Write =SEQUENCE(30,1,DATE(2026,1,1),1) to spill a 30-day date column. It feeds headers and test tables without a single typed cell.

Pro Tip

I recommend building reports as one chained formula rather than ten helper columns, because a chain has a single source of truth and is easier to audit. A common mistake is mixing a spilled result with manual values typed into the same area, so the spill cannot expand and throws #SPILL!. Keep spills in their own clean zone.

Why #SPILL! Happens and How to Fix It

A #SPILL! error means Excel cannot place the results because something occupies the cells it needs. The fix is almost always to clear the blocker. Excel even shows a selector on the error that jumps to the first blocked cell, which saves you hunting row by row.

12
Click the error selector

Select the #SPILL! cell and use the small button that appears to go straight to the cell blocking the spill. This is faster than scanning the area by eye.

13
Delete stray values

Remove any number, text, or formula sitting in the spill path. Even one value stops the whole block. After deletion the result fills in immediately.

14
Unmerge blocking cells

Merged cells in the path also cause #SPILL!. Unmerge them or move the formula elsewhere. Merged cells reserve multiple grid slots that the spill cannot share.

15
Move the formula

If the area must stay occupied, cut the formula to an empty column with room below. The spill then has a clear rectangle and completes without error.

Implicit Intersection and the @ Operator

Implicit intersection is the old rule where Excel picked one value from an array based on your row. Dynamic arrays turned that off, but you can force it with the @ operator. Knowing @ stops confusing results when an old formula meets a new array function.

16
See the @ in old files

When you open a legacy workbook, Excel may add @ before a function to keep the old one-value behavior. For example =@SUM(A2:A10) means take the row's single result, not the whole array.

17
Force one value on purpose

Write =@FILTER(...) when you truly want a single cell result from a spilled function. The @ returns just the first item and prevents a spill into the neighbors.

18
Remove the @ to spill

Delete the @ to let the function spill again. If you inherited a formula that returns only one row and you expected many, a stray @ is usually the cause.

Watch Out

A common mistake is copying a spilled formula into the cells it already fills, which creates a circular block and a #SPILL!. This will break the report until you clear those copies. Treat the blue-bordered area as read-only and edit only the formula cell.

Spill Ranges vs Excel Tables

Both keep reports live, but they solve different problems. An Excel Table grows when you add rows and supports structured names like Sales[Amount]. A spill range is the output of a formula. The strongest setup uses a Table as the source and a dynamic array function as the output, so both ends stay automatic.

19
Make the source a Table

Press Ctrl+T on your data to turn it into a Table named Sales. Formulas can then reference Sales[Region] instead of C2:C100, and new rows are included with no edit.

20
Point the function at the Table

Write =SORT(Sales, 5, -1) to spill the whole table sorted by Amount. Because the source is a Table, the spill resizes when rows are added or removed.

21
Avoid double automation conflicts

Do not also apply a ribbon Sort to a Table that feeds a spill, or the manual sort fights the formula. Pick one mechanism per range and stick to it.

Other Errors You Will Meet

Beyond #SPILL!, dynamic array formulas can return #CALC!, #NAME?, and #REF!. Each points to a specific cause, and once you map the message to the fix, debugging takes seconds instead of minutes.

22
Fix #CALC! empty results

FILTER with no matches and no empty message returns #CALC!. Add a third argument like "none" or 0 so the function shows a clean value instead of an error.

23
Fix #NAME? version gaps

If a function name is unknown, the file is open in an old Excel. Dynamic arrays need Excel 365 or 2021. Open it in a current version or rewrite with legacy methods.

24
Fix #REF! from deleted sources

If the source range was deleted, the spill shows #REF!. Restore the range or repoint the formula. A Table reference avoids this because the name stays valid as rows change.

Dynamic Arrays vs the Old One-Cell World

The old model forced you to copy a formula down every row and hope the range matched. Dynamic arrays compute once and fill as needed. For a team that edits data weekly, the new model removes an entire class of copy-paste mistakes and stale totals.

When you move from legacy formulas, start with one FILTER on a Table and a SUM over its spill. That single pattern delivers most of the payoff before you touch the advanced chains.

Next Steps and a Quick Checklist

Turn your source into a Table, write one spilled formula, and reference its spill with # in a total and a chart. Fix any #SPILL! by clearing the path. Then chain FILTER, SORT, and UNIQUE to replace helper columns one report at a time.

Practice order that works well: SEQUENCE for sample data, FILTER to select, SORT to order, UNIQUE to dedupe, then wrap the chain in SUM. Each guide covers one function in depth so you can build the habit piece by piece.