excel - 使用 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 函数中使用此函数,但它返回错误。
我的结论是
- Lambda 函数不能在递归 lambda 函数中使用
- 递归 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 行的范围
推荐阅读
- angular - 我如何解决错误无法读取未定义的属性“prenom”?
- flutter - 如果全屏,我如何让颤振的导航器在导航栏中推送一条路线
- bash - 如何协调 bash 配置文件与 zsh
- javascript - 使用 howler js 可视化音频
- c++ - 在 C++ 中嵌入 V8 会导致与 libcpp 相关的“无法识别的外部符号”错误
- python-3.x - 有没有办法从 dict 播放歌曲?不和谐.py
- reactjs - 在树数据结构上使用递归函数嵌套material-ui表,如何对齐列?
- pandas - 带有 int32 数组的 Pandas Dataframe 到 PySpark Dataframe 错误
- c++ - 为什么 gcc 'UNIX' 和 'unix' 宏不是一回事?
- javascript - 通过 setter 存储的新属性值在执行前生效