Fixes / Excel · Checked

Excel #CALC! error: what it means and how to fix it

Short answer

#CALC! means Excel's calculation engine can't produce a result from an array formula. The most common cause is FILTER finding no matching rows, which gives an empty array Excel can't show. Fix it by adding the third argument, for example =FILTER(A2:C20,B2:B20="East","No results"), so Excel has something to show when nothing matches.

What this message means

#CALC! is an error that only appears in Excel for Microsoft 365, Excel 2024, Excel 2021, Excel for the web and the mobile apps, because these versions have dynamic array formulas. It means the formula is written correctly but the result can't be calculated as an array. Usually the result would be empty (FILTER found nothing), would be an array inside another array (for example BYROW or MAP returning several values per row), or would be a function instead of a value (a LAMBDA that was never called). Select the cell and hover over the yellow warning icon next to it. The tooltip names the specific type, such as Empty array or Nested array.

Common causes

CauseHow to tell
FILTER (or another dynamic array formula) returned no results, so the array is emptyThe formula uses FILTER, and no rows in your data meet the condition. Change the condition to a value you know exists and the error goes away. The error tooltip says Empty array.
Nested array: a LAMBDA inside BYROW, BYCOL, MAP or SCAN returns more than one value for each itemThe formula uses BYROW, BYCOL, MAP or SCAN, and the calculation inside it would give a list (for example FILTER, TEXTSPLIT, UNIQUE or a whole row) rather than one number or text value. The error also shows with functions given an array where they expect a single value, such as =MUNIT({1,2}).
Array of ranges: a function that returns a range reference was given an array argumentThe formula passes an array constant or a list into OFFSET, INDIRECT or a similar reference function, for example =OFFSET(A1,0,0,{2,3}).
A LAMBDA or function was entered without being calledThe cell holds something like =LAMBDA(x, x+1), or the name of a custom LAMBDA with no brackets after it. There are no brackets with input values at the end.
Excel for the web or custom function limits, or a failed asynchronous functionThe same workbook calculates correctly in desktop Excel. Or the formula uses an add-in custom function that refers to more than 10,000 cells in Excel for the web. Or the error comes and goes when you recalculate.
Python in Excel errorThe cell is a Python cell (it shows PY on the left of the formula bar). The tooltip names a Python-specific reason, such as Too much data, Data limit exceeded or Invalid Python object.

How to fix it

1. Give FILTER a value to show when nothing matches

  1. Click the cell showing #CALC! and look at the formula in the formula bar.
  2. If it uses FILTER with only two arguments, such as =FILTER(A2:C20,B2:B20="East"), add a third argument: =FILTER(A2:C20,B2:B20="East","No results").
  3. Use "" instead of "No results" if you want the cell to look blank, or 0 if other formulas need a number.
  4. Press Enter. When rows match, the list comes back automatically.
  5. If you expected matches, check the criteria for extra spaces, numbers stored as text, or a typo in the text you are filtering on.

2. Find the exact cause from the error tooltip and Evaluate Formula

Evaluate Formula is in desktop Excel for Windows and in current Excel for Mac (Microsoft 365). Excel for the web shows the tooltip but has no Evaluate Formula.

  1. Select the #CALC! cell and hover over the yellow warning icon next to it. Read the reason it gives (for example Empty array or Nested array).
  2. Go to the Formulas tab, then Formula Auditing, then Evaluate Formula.
  3. Click Evaluate repeatedly to step through the formula. Note the step where #CALC! first appears.
  4. Fix that part of the formula using the matching fix on this page.

3. Make BYROW, BYCOL, MAP or SCAN return one value per item

Excel for Microsoft 365 (Windows and Mac), Excel 2024, Excel for the web

  1. Look at the calculation inside the LAMBDA. It must return a single value for each row, column or item.
  2. If you want one summary value per row, wrap the calculation in a function that reduces it to a single value, for example =BYROW(A2:C10,LAMBDA(r,SUM(r))) or TEXTJOIN(", ",TRUE,...) to join several results into one text value.
  3. If you really need several values per row, use REDUCE with VSTACK instead, for example =DROP(REDUCE("",A2:A10,LAMBDA(acc,x,VSTACK(acc,TEXTSPLIT(x,",")))),1).
  4. Press Enter and check that the results spill without errors.

4. Remove the inner array from functions that expect a single value

  1. Find the argument that contains an array constant (values in curly braces like {2,3}) or a whole range where the function expects one number.
  2. Replace it with a single value, for example change =MUNIT({1,2}) to =MUNIT(2).
  3. For reference functions, pass separate arguments instead of an array, for example change =OFFSET(A1,0,0,{2,3}) to =OFFSET(A1,0,0,2,3).
  4. If you need a result for each value in the list, put each one in its own cell or use MAP.

5. Call the LAMBDA instead of returning it

Excel for Microsoft 365, Excel 2024, Excel for the web

  1. If the cell has =LAMBDA(x, x+1), add the input values in brackets straight after it: =LAMBDA(x, x+1)(1). This returns 2.
  2. If you saved the LAMBDA as a name, call it with its arguments, for example =AddOne(A2), not =AddOne.
  3. To save a LAMBDA for reuse, go to Formulas, then Name Manager, then New. Give it a name and paste the LAMBDA into Refers to.

6. Open the workbook in desktop Excel or retry failed functions

  1. If you are in Excel for the web and the formula uses an add-in custom function over a large range, choose Editing, then Open in Desktop App.
  2. If the error comes and goes, recalculate with F9 (Windows) or Cmd+= (Mac) after a short wait. Asynchronous functions can fail temporarily.
  3. For Python cells, reduce the data you pass with xl() (the limit is 100 MB) and check that the Python code returns a supported object.

Next time, skip the search

Crade is an AI assistant for Mac and Windows that sees your screen. When a message like this pops up, ask “what does this mean?” and it explains the exact error in front of you, step by step.

Download Crade

Still not fixed?

Copy the formula into a new, blank sheet with a small sample of the data. If it still shows #CALC!, build it up one function at a time to find the part that fails. If you only need to hide the error, wrap the formula in IFERROR, for example =IFERROR(your_formula,""), but this also hides real problems. If the workbook came from someone else, check which Excel version they use, because Excel 2019 and older don't support these functions at all (they show #NAME? instead). For formulas that still fail, post the exact formula and a sample of the data in the Microsoft Community Excel forum or ask your IT help desk.

Questions people ask

What does #CALC! mean in Excel?

It means Excel can't calculate the result of an array formula. The most common reasons are an empty result (usually from FILTER), an array inside another array, or a LAMBDA that was never called.

Why does FILTER return #CALC!?

No rows matched your condition, and Excel can't show an empty list. Add the third argument (if_empty), for example =FILTER(A2:C20,B2:B20="East","None").

How do I hide #CALC! and show a blank cell instead?

For FILTER, set the third argument to "". For other formulas, wrap them in IFERROR, for example =IFERROR(formula,""). Be aware this hides every other error type too.

Why does BYROW or MAP give #CALC! when the formula works on its own?

BYROW, BYCOL, MAP and SCAN only accept one value per row or item from the LAMBDA. If the calculation returns a list, Excel treats it as a nested array and shows #CALC!. Reduce it to one value, or use REDUCE with VSTACK.

Why don't I see #CALC! in older Excel versions?

#CALC! only exists in versions with dynamic arrays (Microsoft 365, Excel 2021, Excel 2024, and Excel for the web). Older versions don't have FILTER, LAMBDA or BYROW, so they show #NAME? for those formulas.

Sources