首页 > 解决方案 > 使用 Excel 溢出范围作为递归 Lambda 函数的数据源

问题描述

我编写了一个 ExcelLAMBDA函数,用于从字符串中提取数字。这是公式 get.numbers=LAMBDA(text,ntext,position,size,VALUE(LET(x,LEN(text),n,position,IF(n>x,ntext,get.numbers(text,IF(ISNUMBER(VALUE(MID(text,n,size))),ntext&MID(text,n,size),ntext),n+1,size)))))

当文本来自单个单元格范围时,该公式运行良好,例如A2,但如果您尝试在溢出范围 ( A2#) 上使用它,它会返回 #NUM!错误。我有另一个LAMBDA函数,它接受一个字符串并从另一个字符串中的特定位置获取一个字符。如果字符是数字,它会将字符连接到给定的字符串。我尝试在 get.numbers 函数中使用此函数,但它返回错误。

我的结论是

  1. Lambda 函数不能在递归 lambda 函数中使用
  2. 递归 Lambda 函数无法接受来自溢出范围的数据

有没有办法解决这个问题?

标签: excelrecursionlambdaexcel-lambda

解决方案


按照上面 Axuary 的回答,我做了进一步的试验,并且能够清理公式,使公式只接受一个参数(字符串或包含字符串的范围)。最后的公式是

Call.GetNumbers.Array =LAMBDA(array,get.numbers.array(array,"",1,1))

它只需要一个参数(数组),它可以是包含字符串的单元格,也可以是溢出的范围
。主要公式是:

get.numbers.array =LAMBDA(array,last,r,ln,LET(n,ROWS(array),q,SEQUENCE(n),lineresult,Call.Join.numbers(INDEX(array,r)),d,IF(r>n,last,get.numbers.array(array,Call.Join.numbers(INDEX(array,r)),r+1,ln+1)),IF(ln=q,lineresult,INDEX(d,q))))

剩下的公式是:

Call.Join.numbers =LAMBDA(text,join.numbers(text,"",1))
join.numbers =LAMBDA(text,ntext,p,LET(l,LEN(text),VALUE(IF(p>l,ntext,join.numbers(text,ntext&get.If.Number(text,p),p+1)))))
get.if.Number =LAMBDA(text,x,IF(ISNUMBER(VALUE(MID(text,x,1))),MID(text,x,1),""))

该公式适用于 1 列乘 95 行的范围


推荐阅读