在 Excel 中使用 LAMBDA 递归将一组数字相加
Add Together a Set of Numbers using LAMBDA Recursion in Excel
我的工作表的单元格 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
- 引用您的 cell/string 个数字;
AddAll
- 添加数字的总计;
X
- 一个简单的计数器,就像我们在 VBA; 中编写一个函数一样
如果将该函数添加到您的名称管理器中,您现在可以使用以下方式调用它:=Addnumbers(I32,0,1)
,意思是:
- 调用我们命名为“AddNumbers”的
LAMBDA()
函数;
- 第一个参数必须是对我们cell/string;
的引用
- 第二个参数是我们当前的总数,开始时为零;
- 第三个参数是我们计数器的开始,应该是1。
我专门添加了嵌套的 IF()
来进行迭代,i.o.w。递归。 IF()
检查计数器的当前状态。只有当它大于我们输入的总长度时,它才会 return 当前总长度,否则;递归从在我们使用的第二个参数(FALSE
参数)中再次调用 LAMBDA()
开始:
- 相同的
Input
值;
- 使用
MID()
将当前索引中的一个数字添加到我们的总数中 AddAll
;
- 将我们的计数器
X
增加 1。
现在我们已经解决了递归问题,我想说如果您想使用 LAMBDA()
,这里有更好的选择,因为不需要递归。尝试:
=LAMBDA(Input,SUM(--MID(Input,SEQUENCE(LEN(Input)),1)))
通过=Addnumbers(I32)
调用。
我的工作表的单元格 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
- 引用您的 cell/string 个数字;AddAll
- 添加数字的总计;X
- 一个简单的计数器,就像我们在 VBA; 中编写一个函数一样
如果将该函数添加到您的名称管理器中,您现在可以使用以下方式调用它:=Addnumbers(I32,0,1)
,意思是:
- 调用我们命名为“AddNumbers”的
LAMBDA()
函数; - 第一个参数必须是对我们cell/string; 的引用
- 第二个参数是我们当前的总数,开始时为零;
- 第三个参数是我们计数器的开始,应该是1。
我专门添加了嵌套的 IF()
来进行迭代,i.o.w。递归。 IF()
检查计数器的当前状态。只有当它大于我们输入的总长度时,它才会 return 当前总长度,否则;递归从在我们使用的第二个参数(FALSE
参数)中再次调用 LAMBDA()
开始:
- 相同的
Input
值; - 使用
MID()
将当前索引中的一个数字添加到我们的总数中AddAll
; - 将我们的计数器
X
增加 1。
现在我们已经解决了递归问题,我想说如果您想使用 LAMBDA()
,这里有更好的选择,因为不需要递归。尝试:
=LAMBDA(Input,SUM(--MID(Input,SEQUENCE(LEN(Input)),1)))
通过=Addnumbers(I32)
调用。