当前位置: 欣欣网 > 办公

新函数Reduce,具有循环计算功能的超级函数

2024-04-09办公

循环计算,又称递归运算,即反复调用自身的结果进行新的运算。除了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集 。( 绿卡会员 有效期内 免费 )详情点击下方链接