REDUCE是什么函数,我们在Excel中输入部分,可以看到微软给出的解释!3点左右一觉醒来,还算清醒,正好给大家简单聊聊他的基础用法!其中比较难以理解的应该就是第三参数,所以我们先给大家补一下 第三参数相关的知识! 第三参数是一个自定义函数,一般结构为 LAMBDA(x,y,处理逻辑) LAMBDA 在大部分语言中都有,属于匿名函数的意思!,我们可以看一个简单的案例,比如我们想实现两个数的合计,如果使用LAMBDA来处理的话应该这样!分别是参数1:x 参数2:y, 他们的逻辑是计算x+y 那么我们如何来调用呢?只要在后面添加括号传入两个参数即可比如,我们计算1+21、第一参数:如果什么都不给,就是写一个逗号,表示初始值是第二参数中的第一个值2、第二参数如果是单元格引用,那么引用特性会被保留,后面有案例说明!--> REDUCE(初始值,数组,LAMBDA(x,y,处理逻辑))参数说明:这里的x,y只是一个变量,你可以随意替换!x和y 使用比较多,就好像VBA中,我们常用i和j来处理循环一样!当然我们也可以参考PQ中,accumulate,使用 s 和 c来表示,s-start(初始值),c-Current(当前值),也是一种不错的写法! 简单说明后,我们就来看一个基础案例,方便大家去了解其中的两个参数x和y最基本的就是实现一个累计求和,这个实战案例意义不大,但是可以方便我们去理解参数! 过程解读:第二参数A2:A11,10个数,说明过程要循环10次,每次取数一个!下面我们就使用表格,看一下,每一步中,x,和y,所表示的值!x值,除了第一次是初始值,后面都是逻辑计算后的值,y就是表示当前数组中的值,从数组的第一行开始,依次提取! 这里的重点其实是我们可以拿到每次逻辑出后的值,这个很重要,案例中,我们仅仅是相加,但是实际上,我们可以做各种逻辑处理! 下面图中写法,可以帮助我们快速理解,第一参数问题,我们使用 x&'+'&y,可以把每次的结果拼接上当前的内容,方便我们去观察公式1中:第一个数值是1,说明我们第一循环时,x就是第二参数的第一个值我们通过这个工资条的案例,可以验证保留引用这个特性!我们循环的是序号,每次拿到的是A2、A3、A4和A5,这些单元格,之所以我们可以使用OFFSET拿到整行内容,就是因为在循环中y保留了单元格的引用特性!=DROP( REDUCE('',A2:A5, LAMBDA(x,y, VSTACK(x,VSTACK(A1:G1,OFFSET(y,,,,7),IF(A1:G1>0,''))) ) ),1 ) VSTACK(A1:G1,OFFSET(y,,,,7),IF(A1:G1>0,''))主要是把标题和当前行的内容,再加上一个空行上下拼接到一起!最后每个人的工资条都成一个表,还需要把上次的结果也拼接上,这也是为什么还要VSTACK(x,……)有了这个特性,我们可以做很多操作,比如累计求和的内存数组写法注意其中的SUM(A2:y),更能说明保留引用特性=DROP( REDUCE('', A2:A11, LAMBDA(x,y,VSTACK(x,SUM(A2:y)))),1 )
3、借助VSTACK和HSTACK函数,可以保存每次结果拼接成内存数组
|