在Excel函数中,SCAN函数是LAMBDA的重要辅助工具,SCAN函数核心功能是对数组进行循环计算并返回每一步的中间结果。这一特性使其与REDUCE函数形成鲜明对比——REDUCE仅输出最终结果,而SCAN函数会完整呈现所有计算过程的结果。
一、SCAN函数解析
SCAN函数的语法为:
=SCAN([initial_value],array,LAMBDA(x,y,body))
参数1(初始值):循环计算的起始数值,若省略则默认以数组第一个元素作为初始值。
参数2(数组区域):需要进行循环处理的数据范围。
参数3(LAMBDA表达式):定义计算逻辑,其中x代表上一步的结果,y代表当前循环的元素,body为具体计算式。
尽管参数与REDUCE函数高度一致,但两者的输出形式截然不同。
二、实战案例:SCAN函数的具体应用
案例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制作阶梯图
公式:=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函数的核心价值
SCAN函数虽不如REDUCE常用,但其保留中间结果的特性,在数据追踪、趋势可视化、分步计算等场景中独具优势。通过与LAMBDA、REPT、GROUPBY等函数组合,能大幅提升Excel数据处理的灵活性。想要提升Excel技能,掌握SCAN函数是不可或缺的一步。
评论 (0)