递归之二(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),";;;@"),""))