Skip to content

Fix Excel

A user in an Excel Power User forum recently posted: “I wrote a recursive LAMBDA function to strip special characters from strings. It works perfectly for a single cell, but as soon as I wrap it in a MAP function to process a dynamic array (like A2#), every cell returns a #NUM! error. Why does it break when nested?”

This is a common headache in Microsoft 365. The #NUM! error in this context usually isn’t about the math; it’s about Excel’s recursion limit or a stack overflow within the calculation engine’s memory when “anonymous” functions (lambdas not saved in the Name Manager) are called repeatedly.

The most reliable way to fix this is to move your recursive logic out of the MAP formula and into the Name Manager. Excel handles named recursive functions much more efficiently than “anonymous” ones defined inline.

  1. Copy your LAMBDA code (excluding the MAP part).
  2. Go to Formulas > Name Manager > New.
  3. Name it (e.g., CleanString).
  4. Paste your code into the Refers to box.
  5. In your sheet, call it via MAP(A2#, LAMBDA(val, CleanString(val))).

Step-by-Step Breakdown: Processing Arrays with Recursion

Section titled “Step-by-Step Breakdown: Processing Arrays with Recursion”

If you are trying to perform a complex task—like a recursive factorial or a multi-step string replacement—on an array, follow this workflow to ensure stability.

1. Define the Recursive LAMBDA in Name Manager

Section titled “1. Define the Recursive LAMBDA in Name Manager”

Excel’s engine struggles to track the “self-reference” of a recursive function when it is buried inside another array function like MAP or BYROW. By naming it, you give Excel a fixed pointer in memory.

Example Function: RecursiveStrip Tested on Excel for Microsoft 365 (Version 2408) as of late 2024.

=LAMBDA(text_val, char_to_remove,
IF(ISERROR(FIND(char_to_remove, text_val)),
text_val,
RecursiveStrip(SUBSTITUTE(text_val, char_to_remove, ""), char_to_remove)
)
)

Once the name is saved, you can safely use it to process a spill range or a dynamic array.

=MAP(A2:A10, LAMBDA(row_val, RecursiveStrip(row_val, "-")))
Argument/Function Purpose Why it matters for #NUM!
MAP Iterates through an array. Creates a new “scope” for every row.
Name Manager Stores the LAMBDA. Prevents Excel from losing the “link” to the recursive call.
Base Case The IF statement. If missing, recursion never ends, triggering #NUM!.
Limit 1,024 calls. Excel kills any recursion deeper than this to prevent crashes.

Even if you use the Name Manager, Excel has a hard limit of 1,024 recursive calls. If you are processing a very long string and your function recurses for every single character, you will hit a #NUM! error regardless of your formula structure.

  • Fix: If you are cleaning strings, try using REDUCE instead of recursion. REDUCE is iterative and does not count toward the recursion limit.

Missing the “Self-Reference” in Anonymous Lambdas

Section titled “Missing the “Self-Reference” in Anonymous Lambdas”

If you insist on not using the Name Manager, you must use the ME technique (passing the function to itself). However, this is significantly more prone to #NUM! errors when nested inside MAP.

  • The “ME” Pattern (Example only — verify in your environment): =LAMBDA(me, val, IF(condition, result, me(me, next_val)))

If your recursive function expects a String but MAP passes a Number (or an Error), the recursive step might fail to find a “Base Case,” leading to infinite recursion until the stack overflows. Use IFERROR inside your LAMBDA to handle these cases.


What if I need to apply this to filtered rows only? You can wrap your array in the FILTER function before passing it to MAP. For example: MAP(FILTER(A2:A10, B2:B10="Active"), LAMBDA(val, MyNamedLambda(val))). This reduces the number of recursive calls by only processing relevant data.

Can I automate this with VBA instead? Yes. While LAMBDA is powerful, if you find yourself hitting the 1,024 recursion limit or experiencing slow workbook performance, a VBA User Defined Function (UDF) is often faster. VBA handles deep loops more gracefully than the Excel calculation engine handles deep recursion.

Does this work in Excel for Web? Yes, the Name Manager and recursive LAMBDAs are fully supported in Excel for Web, provided you are using a Microsoft 365 subscription. The 1,024 recursion limit remains the same.