在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},这个结果的数量和数组元素的数量相同,能清晰地看到每一步累计平方和的情况。

巧用SCAN函数处理合并单元格:实现高效分类汇总-天天办公网

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函数是非常关键的一步。