今天我们来学习下另一个新函数——SCAN的用法,它跟上一周讲过的REDUCE函数非常的相似,也是LAMBDA的辅助函数,只不过它会将所有遍历的结果都显示出来,而REDUCE只会显示最后的结果。
一、SCAN
SCAN:通过对每个值应用 LAMBDA 来扫描数组,并返回具有每个中间值的数组。
语法:=SCAN ([initial_value],array,lambda (x,y,body) )
参数1:初始值
参数2:需要循环的数据区域
参数3:关于lambda的计算表达式
它的参数与之前讲的REDUCE函数几乎是一模一样的,但是作用完全不同,SCAN函数会将每个值的结果显示出来,而REDUCE函数它只会输出结果,我们来具体演示下
二、案例演示
公式:=SCAN(0,C2:C5,LAMBDA(x,y,y*y+x))
参数1:0,表示起始值为0
参数2:C2:C5,表示需要循环的区域
参数3:LAMBDA(x,y,y*y+x),有关于lambda的表格式
如下图所示,我们需要对当前的数据求平方和,REDUCE它只会显示最终的结果,而SCAN函数会将每个值得结果都罗列出来,就是说结果个数与第二参数的个数是相等的,来简单的说下计算过程
代入数字1,x为0,y为1,计算式为1*1+0,结果为1,会将结果存在x中进入下次循环,
代入数字2,x为1,y为2,计算式为2*2+1,结果为5
代入数字3,x为5,y为3,计算式为3*3+5,结果为14
代入数字4,x为14,y为5,计算式为4*4+14,结果为30
三、制作阶梯图
公式:=SCAN("",B2:B5,LAMBDA(x,y,REPT("|",y*200)&" "&TEXT(y,"0%")))
SCAN函数会显示每一步的结果,我们就可以考虑使用REPT+竖线来构建一个阶梯图,构建它的前提是,数据要升序排序,并且将文字字体改成Playbill,这个字体会将竖线显示为条形图的样子
REPT("|",y*200),这个函数的作用是将竖线重复显示多次,得到竖线将其显示为条形图的样子,TEXT(y,"0%")用来设置数据格式,将其转换为百分比格式。
四、统计最大连续次数
公式:=MAX(SCAN(0,B2:B15,LAMBDA(x,y,IF(y="胜",x+1,0))))
在这里我们要判断最大的连胜次数,判断它是不是胜利,如果胜利就在当前的结果加1,如果失败了,就返回0,从新开始计算胜利与否
五、合并单元格计算
公式:=VSTACK({"部门","销量"},GROUPBY(SCAN(,A2:A12,LAMBDA(x,y,IF(y<>"",y,x))),C2:C12,SUM,,0))
这个公式的关键点就是SCAN(,A2:A12,LAMBDA(x,y,IF(y<>"",y,x)))
在这里我们将第一参数省略掉,函数就会自动返回第二参数的第一个值,在A2:A12这个区域中第一个值是【销售1部】,之后从第二个元素开始判断Y是否等于空值,条件成立则返回Y否则返回X,这样的话就能将合并单元格拆分开,
随后使用GROUPBY来进行分类汇总,求和就需要设置三参数为SUM,计数则将SUM改成COUNTA
最后使用VSTACK函数在最上方连接上表头,这个就是公式的计算过程
以上就是今天分享的全部内容,相较于REDUCE函数,SCAN的应用应不算广泛,大家了解下即可~