最佳答案一、函数解析SCAN函数的语法表达式为:=SCAN([initial_value],array,LAMBDA(x,y,body))参数1(初始值):作为循环计算的开端数值,要是没有填写,就会自动把数组的第一个元素当作初始值。参数2(数组区域):指的是需要进行循环处理的数据所在的范围。参数3(LAMB......
一、函数解析
SCAN函数的语法表达式为:
=SCAN([initial_value],array,LAMBDA(x,y,body))
参数1(初始值):作为循环计算的开端数值,要是没有填写,就会自动把数组的第一个元素当作初始值。
参数2(数组区域):指的是需要进行循环处理的数据所在的范围。
参数3(LAMBDA表达式):用于确定计算的逻辑,其中x表示上一次循环得到的结果,y表示当前循环中的元素,body则是具体的计算式子。
虽然SCAN函数和REDUCE函数的参数设置十分相似,但它们输出结果的形式却大相径庭。
二、应用案例
1.计算累计平方和
公式:=SCAN(0,A2:A5,LAMBDA(x,y,y*y+x))
这里初始值设定为0,数组区域是A2:A5(里面包含1、2、3、4这些数值),计算逻辑是“当前元素的平方加上上一步的结果”。
计算步骤如下:
第一步:x=0,y=1,计算可得1²+0=1(该结果会存入x,供下一步使用);
第二步:x=1,y=2,计算得出2²+1=5;
第三步:x=5,y=3,得到3²+5=14;
第四步:x=14,y=4,算出4²+14=30。
最终输出的结果是{1,5,14,30},这个结果的数量和数组元素的数量相同,能清晰地看到每一步累计平方和的情况。
2.制作阶梯图
公式:=SCAN(“”,B2:B5,LAMBDA(x,y,REPT(“|”,y*200)&””&TEXT(y,”0%”)))
适用场景:可以直观地展示出数据逐渐上升的趋势(不过要先保证数据已经按照升序排列)。
原理:借助REPT函数重复生成“|”来形成竖线,乘以200是为了对竖线的长度进行调整;TEXT函数则是把数值转换成百分比的格式。
注意事项:将单元格的字体设置为“Playbill”,竖线就会显示出条形图的样式,阶梯的效果会更加突出。
3.统计最大连续次数
公式:=MAX(SCAN(0,B2:B15,LAMBDA(x,y,IF(y=”胜”,x+1,0))))
逻辑说明:如果当前元素是“胜”,就在前一步结果的基础上加1;要是当前元素不是“胜”,就把结果重置为0。
SCAN函数会输出每一步的连续次数,在外面嵌套MAX函数,就能提取出其中的最大值,从而快速得出最长的连胜记录。
4.合并单元格的分类汇总
公式:=VSTACK({“部门”,”销量”},GROUPBY(SCAN
(,A2:A12,LAMBDA(x,y,IF(y<>””,y,x))),C2:C12,SUM,,0))
关键操作:SCAN函数通过IF(y<>””,y,x)来填充空白单元格——当遇到非空值时,就更新为当前值,要是遇到空值,就沿用前一个值,这样就实现了合并单元格的拆分。
之后用GROUPBY函数按照部门对销量进行汇总,再用VSTACK函数添加表头,就能高效地完成分类计算。