在Excel的数据处理工具库中,SCAN函数凭借其与LAMBDA的协同能力占据重要地位,它能对数组执行循环运算,并且将每一次运算的中间结果完整保留下来。这一特性让SCAN函数和REDUCE函数有着明显区别——REDUCE函数最终只给出一个计算结果,而SCAN函数则能把整个计算过程中的结果一一呈现。
一、函数解析
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函数添加表头,就能高效地完成分类计算。
三、总结
SCAN函数虽然不像REDUCE函数那样被频繁使用,但它保留中间结果这一特点,在数据追踪、趋势可视化以及分步计算等场景中有着独特的优势。将它与LAMBDA、REPT、GROUPBY等函数结合使用,能够极大地增强Excel数据处理的灵活性。如果想要提高Excel技能,掌握SCAN函数是非常关键的一步。