在Excel中使用LAMBDA递归相加一组数字

3
我在工作表的单元格I32中有一组连续的数字(123456789)。 我想使用新的LAMBDA函数进行九次迭代,将每个数字相加。 单元格L32中的最终值应为45。
目前我的公式产生了#VALUE!错误。 我是基于Microsoft Excel博客上显示的=REPLACECHARS示例进行操作的,该示例会从单元格中删除无效字符。
=LAMBDA(Number,NumberGroup,

AddNumbers(

SUM(LEFT(Number,1)),
RIGHT(NumberGroup,LEN(NumberGroup)-1)
)

)(L32)
1个回答

3

您当前未使用任何递归。 您只是在尝试求和。 如果您确实想要将递归放在您的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个参数必须是我们单元格/字符串的引用;
  • 第2个参数是我们当前的总计,即一开始为零;
  • 第3个参数是我们计数器的起始点,应为1。

我特别添加了嵌套的IF()以启动迭代,即递归。 IF()检查计数器的当前状态。仅当计数器大于输入的总长度时,它才会返回当前总计,否则递归会开始,第二个参数(FALSE参数)会再次调用LAMBDA(),并使用以下内容:

  • 相同的Input值;
  • 使用MID()将当前索引中的一个数字添加到我们的AddAll总数中;
  • 将我们的计数器X增加1。

现在我们已经解决了递归问题,如果您要使用LAMBDA(),则我会说在这里有更好的选项,因为不需要递归。请尝试:
=LAMBDA(Input,SUM(--MID(Input,SEQUENCE(LEN(Input)),1)))

通过=Addnumbers(I32)进行函数调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接