循环计算,又称递归运算,即反复调用自身的结果进行新的运算。除了VBA,以前是没有任何函数可以完成这样的功能的,而新函数
REDUCE
则可以(
WPS目前不支持,而但很多也会添加
)。所以兰色称它们为超能力函数。
是不是听的迷迷糊糊的?还是举几个例子更容易理解。
【例】如下图所示,要求把A列 大于30 的数字用逗号全部连接到一起。结果如C1单元格所示。
分析:
A列的数字需要逐个判断是否大于30,A1的值
37
大于30,保留在一个临时结果中。当判断到A4单元格(值为33)时,就会用上次临时结果37连接33,得到新的临时结果
37,33
,判断到A6单元格(值42)也大于30,会用上一次的结果
37,33
连接A6值
,
即得到新的临时结果
37,33,42
,这样一直循环运算下去,得到最终结果
37,33,42,50
。
新函数Reduce则可以实现上述循环运算过程。公式为:
=REDUCE(,
A1:A9
,LAMBDA(
X
,
Y
,
IF(
Y
>30,X&","&
Y
,X)
))
运算原理:
第一个参数是初始值( 留空 ) 在lambda的参数中对应 X 值的初始值
第二个参数 A1:A9 是一组数,对应 Y 值( Y是第二个参数的逐个遍历的值 )。
IF( Y >30,X&","& Y ,X) 判断 Y 值是否大于30,如果大于则用上一次运算结果X值连接Y,否则保留上一次运算的结果X。而新的 IF( Y >30,X&","& Y ,X) 运算结果,则是下一次运算式中的X值。
如果还不理解,再看一个用户的真实提问:
【例】 如下图所示,D列为地名,要求把A列中包含的地名全部删除,结果为E列所示。如A2和A3单元格都有D列的 成都 (d14单元格) ,所以删除后的结果如E2和E3所示。
这个示例正好可以用Reduce函数解决:
=REDUCE( A2 ,$D$2:$D$14,LAMBDA( x ,y, SUBSTITUTE(x,y,"") ))
注:A2是X的初始值, SUBSTITUTE(x,y,"") 是逐个用D列的值对X进行替换,结果作为新的待替换X值。 SU BS TI TUTE(x,y,"") 最后一次运算的结果,也是公式的最终结果。
兰色说 :递归运算在VBA编程里是一个难点,而具有递归运算的函数也同样不容易难理解它的计算过程。只是,这种运算可以解决工作中很多大难题,所以这类函数兰色还是建议同学们尽量掌握。以后兰色也会尽量分享更多的应用实例。
兰色根据多年经验,录制了一全套适合新手和初中级阶段用户学习的Excel教程。包括 Excel表格88个函数用法( 即将更新几十个新函数 )、119个使用技巧、透视表从入门到精通50集、图表从入门到精通186集 。( 绿卡会员 有效期内 免费 )详情点击下方链接