递归之二(Excel函数集团)

递归,应该算是个数学问题吧,但它并不只能解决数学问题,还可以解决Excel里的迭代问题。

ExcelHome的系列丛书之一,《Excel2019函数与公式应用大全》的第481页示例25-4,就是一个带计算器的迭代问题,这类问题不用迭代也可以,但需要加辅助列:E列是序列数,F列是计算结果,当E列大于2之后,就得出了正确的结果。

=IF(E3<2,"",F2)&IF(COUNTIF(B$3,"*"&MID(A$3,E3,1)&"*"),MID(A$3,E3,1),"")

 

在F3公式中, IF(E3<2,"",F2)相当于开关,Countif部分是将A3中第一个字符,拿到B3里进行“查找”,例子“河”字在“大河山川”中存在,结果为1,那就反回对应的“河”,否则返回空文本;公式下拉以后,就是“查找”“海”字在“大河山川”中是否存在,并且连接F3,也就是上一个公式得出的结果。

定义一个名称为SFx,在上述的公式中,E列就可以让Lambda定义一个x来代替,而连接的“上一个公式得出的结果”,就是SFx(x-1)

SFx=LAMBDA(x,IF(x<2,"",SFx(x-1))&IF(COUNTIF(B3,"*"&MID(A3,x,1)&"*"),MID(A3,x,1),""))

 

如此一来,就不需要两列辅助列来实现了。

另外, 《Excel2019函数与公式应用大全》的示例25-5,也是相似的问题,换成Lambda可以写成:

NFx=LAMBDA(x,IF(x,NFx(x-1)&IFERROR(--MID(A3,x,1),""),""))
TFx=LAMBDA(x,IF(x,TFx(x-1)&TEXT(MID(A3,x,1),";;;@"),""))

 

相关视频:https://v.douyin.com/BAUPajE/

posted @ 2022-12-22 17:28  熬肥妖  阅读(138)  评论(0编辑  收藏  举报