Array formulas in Excel calculate multiple values at once and return either a single result or multiple results across a range. But most users think they’re obsolete — and that’s exactly why they keep getting wrong answers in SUMIFS-heavy reports.
Quick Answer
Array formulas let Excel process entire ranges as single units — like treating A1:A10 * B1:B10 as ten simultaneous multiplications instead of writing =A1*B1 ten times. They’re not gone; they’ve just changed shape: some now auto-spill (Excel 365/2021), others still need Ctrl+Shift+Enter (legacy versions), and all require different mental models than regular formulas.
All the Methods
| Method | Steps | Best For | Limitations | Time for 10K rows | Accuracy | Difficulty |
|---|---|---|---|---|---|---|
| Dynamic Array (Excel 365) | Type =FILTER(A2:A10000,(B2:B10000>1000)*(C2:C10000="Active")) → press Enter | Filtering, sorting, unique lists, real-time dashboards | Only works in Excel 365/2021+; spills overwrite adjacent cells if blocked | 0.8 sec | 100% | Low |
| Legacy CSE Array | Select D2:D10 → type =SUM(A2:A10*B2:B10) → press Ctrl+Shift+Enter | Older Excel versions; complex conditional sums with non-contiguous logic | Fragile — can’t edit single cell in multi-cell array; breaks if inserted into table | 1.4 sec | 97% (fails silently on mismatched ranges) | High |
| INDEX + AGGREGATE combo | =INDEX(A2:A1000,AGGREGATE(15,6,ROW(A2:A1000)/((B2:B1000>5000)*(C2:C1000="Pending")),1)) | Backward-compatible lookups without CSE; avoids volatile functions | Hard to audit; no native spill — must copy down manually | 2.1 sec | 100% | Medium-High |
| SUMPRODUCT (non-array but array-like) | =SUMPRODUCT((B2:B1000>1000)*(C2:C1000="Closed")*(D2:D1000)) | Cross-version compatibility; readable logic; no CSE needed | Slower on >50K rows; doesn’t spill; limited to scalar output | 3.3 sec | 100% | Low-Medium |
Method 1 Deep Dive
Open a new sheet. Paste this data starting at A1:
| Name | Sales | Status | Region |
|---|---|---|---|
| Sarah Chen | $45,200 | Active | APAC |
| Diego Mora | $12,800 | Pending | EMEA |
| Priya Patel | $67,100 | Active | APAC |
| James Wu | $21,400 | Closed | NA |
| Anya Petrova | $89,600 | Active | EMEA |
| Tariq Hassan | $33,500 | Pending | NA |
| Lena Kim | $52,900 | Active | APAC |
Now go to F1. Type:=FILTER(A2:A8,(B2:B8>40000)*(C2:C8="Active"))
Press Enter.
This returns Sarah Chen, Priya Patel, Anya Petrova, and Lena Kim — all in one go. No drag-down. No helper columns. The formula lives in F1, but spills into F2:F4 automatically.
Try editing B3 (change $12,800 → $128,000). Watch F2:F4 update instantly — including Diego Mora’s name. That’s the power: it’s live, reactive, and self-sizing.
Here’s the counterintuitive part: You cannot delete just F2. If you try, Excel says “You can’t change part of an array.” You must select the entire spill range (F1#) or edit the source formula. This isn’t a bug — it’s intentional design. Arrays protect integrity.
Method 2 Deep Dive
This one works in Excel 2010 through 2019 — no 365 required.
In G1, type:=SUM(A2:A8*B2:B8)
Don’t press Enter. Press Ctrl+Shift+Enter instead. Excel wraps it in curly braces: {=SUM(A2:A8*B2:B8)}.
This multiplies each Sales value by its row-matched Status text — but since Status is text, the multiplication coerces TRUE/FALSE to 1/0. So only rows where Status = "Active" get counted (because “Active”=TRUE → 1, others become 0).
Wait — that’s not right. Let’s fix it.
Actually, we want total sales for Active reps only. So use:=SUM((B2:B8)*(C2:C8="Active"))
Then press Ctrl+Shift+Enter.
The result? $247,800 — sum of $45,200 + $67,100 + $89,600 + $52,900.
Now try selecting G1:G3 and typing the same formula. Press Ctrl+Shift+Enter. Excel fills G1:G3 with three identical values — because it’s forcing a multi-cell array. Don’t do that unless you need three copies. Single-cell CSE arrays are safer.
Here’s what most miss: if your ranges don’t line up — say B2:B9 and C2:C8 — Excel won’t warn you. It truncates silently to the shortest range. So B2:B9*C2:C8 becomes B2:B8*C2:C8. Always check dimensions first.
Cheat Sheet
| Task | Formula Pattern | Shortcut | Notes |
|---|---|---|---|
| Get top 3 active reps by sales | =SORT(FILTER(A2:C8,C2:C8="Active"),2,-1) | Enter | Spills 3 rows × 3 columns |
| Sum sales where region = APAC AND status ≠ Pending | =SUM((B2:B8)*(D2:D8="APAC")*(C2:C8<>"Pending")) | Ctrl+Shift+Enter | Legacy-only; watch for text coercion |
| Find first date where sales > $50k | =INDEX(E2:E8,MATCH(1,(B2:B8>50000)*1,0)) | Ctrl+Shift+Enter | E2:E8 assumed to be dates; requires CSE in pre-365 |
| Count unique companies in column A | =UNIQUE(A2:A8) | Enter | Use COUNTA(UNIQUE(A2:A8)) for count |
| Extract names where sales rank in top 2 | =INDEX(SORTBY(A2:A8,B2:B8,-1),SEQUENCE(2)) | Enter | SORTBY + SEQUENCE = no helper columns |