我的工作表的单元格 I32 (123456789) 中有一组连续的数字。我想使用新的 LAMBDA 函数通过九次迭代(使用递归)将每个数字相加。单元格 L32 中的最终值应为 45。
我现在得到的是一个#VALUE!错误。我将其基于 Microsoft Excel blog 中显示的 =REPLACECHARS
示例,其中从单元格中删除了无效字符。
公式:
=LAMBDA(Number,NumberGroup,
AddNumbers(
SUM(LEFT(Number,1)),
RIGHT(NumberGroup,LEN(NumberGroup)-1)
)
)(L32)
最佳答案
您目前没有使用任何递归。你只是想总结。如果你真的想在你的 LAMBDA()
中递归,试试像这样的东西:
=LAMBDA(Input,AddAll,X,IF(X=LEN(Input)+1,AddAll,Addnumbers(Input,AddAll+MID(Input,X,1),X+1)))
我为 LAMBDA()
创建了三个参数:
Input
- 对您的单元格/数字字符串的引用;AddAll
- 添加数字的总计;X
- 一个简单的计数器,就好像我们在用 VBA 编写函数一样;
如果将该函数添加到您的名称管理器中,您现在可以使用:=Addnumbers(I32,0,1)
调用它,意思是:
- 调用我们命名为“AddNumbers”的
LAMBDA()
函数; - 第一个参数必须是对我们的单元格/字符串的引用;
- 第二个参数是我们当前的总数,开始时为零;
- 第三个参数是我们计数器的开始,应该是1。
我专门添加了嵌套的 IF()
来进行迭代,i.o.w.递归。 IF()
检查计数器的当前状态。只有当它大于我们输入的总长度时,它才会返回当前总长度,否则;递归从在我们使用的第二个参数(FALSE
参数)中再次调用 LAMBDA()
开始:
- 相同的
输入
值; - 使用
MID()
将当前索引中的数字之一添加到我们的AddAll
总数中; - 将我们的计数器
X
增加 1。
现在我们已经解决了递归问题,如果您想使用 LAMBDA()
,我会说您在这里有更好的选择,因为不需要递归。尝试:
=LAMBDA(Input,SUM(--MID(Input,SEQUENCE(LEN(Input)),1)))
通过 =Addnumbers(I32)
调用。
关于excel - 在 Excel 中使用 LAMBDA 递归将一组数字相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65974390/