Excel情报局

职场联盟Excel

探索挖掘分享Excel实用技能
Super Excel Man
用1%的Excel基础搞定99%的职场难题
做一个超级实用的Excel公众号
Excel是门手艺玩转需要勇气
数万表格爱好者聚集地


大家好,今天我们来简单讲讲SCAN函数

SCAN函数是Excel365和WPS表格新增的作为LAMBDA函数的辅助函数,具有遍历数组并生成内存数组的强大能力。它通过逐次扫描数组元素将每次计算结果传递给下一步运算,最终输出一个包含所有中间结果的数组。

所以学习SCAN函数之前就要先复习LAMBDA函数。


LAMBDA函数复习(点击文字超链接)
(1)第一次用LAMBDA函数,我竟是通过这个案例理解它的!
(2)第二次用LAMBDA函数,用简单的求和场景继续思考!
(3)LAMBDA函数,带领TEXTJOIN玩转合并文本!
(4)LAMBDA函数,也可以玩转累计求和!
(5)LAMBDA代替繁琐重复的IF多层嵌套,解放双手!

通过复习LAMBDA函数:

我们知道了LAMBDA函数的基本语法:
=LAMBDA(变量1, 变量2, …, 计算表达式)

通过输入变量(如x, y),变量的个数不限,需在计算表达式中使用。计算表达式基于参数的运算逻辑(如x+y),返回最终结果。


如果你依然觉得抽象,那么举个简单的例子,创建一个两数相加的自定义函数:
=LAMBDA(x,y,x+y)
假设我们对两个参数进行赋值:x=1,y=3,这里的(1,3)依次传递给x和y,然后用它们执行x+y,也就是1+3的计算,返回结果4。

LAMBDA函数仅仅是定义了参数和计算,各个参数并没有实际的值,所以单独输入到单元格中并不会返回具体的结果。

所以说LAMBDA函数一定要配合其他的兄弟函数才能实现它的价值,就比如今天我们讲的SCAN遍历函数。


进入正题

SCAN函数的基本语法:
=SCAN(初始值, 数组, LAMBDA(累积值, 当前值, LAMBDA计算逻辑))

初始值:累积计算的起点(如0、空值或具体数值)。
数组:需遍历处理的数据范围。
LAMBDA计算逻辑:定义每一步的计算逻辑,参数为累积值(x)和当前值(y)。


阅读到这里是不是还是感觉超级抽象,话不多说,我们上例子。



案例1

比如B列是每日的销量数据,我们想要在C列计算累计求和值,即1月1日的销量累计值为0+150=150,1月2日的销量累计值为150+120=270,1月3日的销量累计值为270+180=450。


首先输入LAMBDA函数:
=LAMBDA(a,b,a+b)

设置变量a为当前累积值,变量b为遍历数组的当前值,用计算式a+b赋予变量意义:即累积值+遍历数组的当前值。

上面说明了LAMBDA函数仅仅是定义了参数和计算,各个参数并没有实际的值,所以输入到单元格中并不会返回具体的结果


用SCAN函数玩遍历。直击痛点:手动累加、合并单元格查找。
最后用LAMBDA函数作为SCAN的第三参数:
=SCAN(0,B2:B4,LAMBDA(a,b,a+b))

作用过程
SCAN函数第一参数初始值:0,也就是说起始累加值为0。

1月1日:用起始的累加值0+遍历数组范围B2:B4中的第一个当前值150,即0+150=150。这个150会以数组的形式储存起来传递给下一次运算的起始累加值。

1月2日:用起始的累加值150+遍历数组范围B2:B4中的第二个当前值120,即150+120=270。这个270会以数组的形式储存起来传递给下一次运算的起始累加值。

1月3日用起始的累加值270+遍历数组范围B2:B4中的第三个当前值180,即270+180=450。这个450会以数组的形式储存起来传递给下一次运算的起始累加值。

最终输出:生成数组溢出结果{150,270,450},动态展示累计结果



案例2

比如H:I列为车间名称与规定产量的对应表。然后通过A列的车间名称将对应的规定产量登记在D列。注意A列含合并单元格,相同车间名称存在于合并单元格中。


定义LAMBDA函数的变量,变量x为初始累积值,变量y为遍历数组的当前值。

定义LAMBDA函数的计算过程:
=IF(y=””,x,y)

如果变量y,即遍历数组的当前值为空值时,返回变量x,即初始累积值,否则返回遍历数组的当前值。


定义好的LAMBDA函数的所有参数:
=LAMBDA(x,y,IF(y=””,x,y))

上面说明了LAMBDA函数仅仅是定义了参数和计算,各个参数并没有实际的值,所以输入到单元格中并不会返回具体的结果。


最后用LAMBDA函数作为SCAN的第三参数:
=SCAN(,A2:A6,LAMBDA(x,y,IF(y=””,x,y)))

初始值:省略初始值,默认以数组A2:A6内的第一个元素“1车间”作为起始值累积值。

遍历逻辑:
第1行:如果遍历数组A2:A6中当前单元格(y)为“1车间”,返回当前值(y)“1车间”。以此作为下一次运算时的初始累积值(x)。

第2行如果遍历数组A2:A6中当前单元格(y)为空值,返回上一步传递下来的累积值(x)“1车间”。以此作为下一次运算时的初始累积值(x)

第3行:如果遍历数组A2:A6中当前单元格(y)为“3车间”,返回当前值(y)“3车间”。以此作为下一次运算时的初始累积值(x)。

第4行:如果遍历数组A2:A6中当前单元格(y)为空值,返回上一步传递下来的累积值(x)“3车间”。以此作为下一次运算时的初始累积值(x)

第5行:如果遍历数组A2:A6中当前单元格(y)为空值,返回上一步传递下来的累积值(x)“3车间”。以此作为下一次运算时的初始累积值(x)

最终输出:生成连续车间数组{“1车间”,”1车间”,”3车间”,”3车间”,”3车间”}作为XLOOKUP的查找依据。


以此作为XLOOKUP函数的查找值
=XLOOKUP(SCAN(,A2:A6,LAMBDA(x,y,IF(y=””,x,y))),H:H,I:I)

用以上数组溢出结果作为XLOOKUP函数的第一参数,在H:H中查找,返回I:I列对应的规定产量。


其实学习Excel,刚开始是挺难的,如果你没有天赋,那就一直重复,当你快到本能反应的时候,你的重复就是别人眼中的天赋,冲破捆绑,展翅翱翔。回顾关键内容,善用图片表达,学会建立联系,拓展深度广度,浓缩关键概念,应用到行动中,善于归纳总结,尝试进行分享。