完胜的Scan(Excel函数集团)
Scan看上去简单,就四个字母,其实,嗯,很内涵……
Scan的基础用法就三个参数,好吧,实际应该算是四个参数:
=Scan(初始值,数据源,Lambda(定义名称1,定义名称2,运算))
以上,不算废话的废话,但总归没有具体的示例来得实在,来~上示例!
示例1:数据累乘
=SCAN(,A2:A4,LAMBDA(a,b,a*b))
公式中的a、b是自定义的名称
b等同于第二参数,即A2:A4
数据源共3行,公式第一行运算时,a理应是初始值,但公式中第一参数光挂一个逗号,表示不进行任何运算,直接以b的值作为第二行运算时的a
公式第二行运算a*b,结果为6,即第三行运算中的a
类推
示例2:完败的Frequency
返回连续出现最多的次数
Scan公式:=MAX(SCAN(0,A$12:A$36,LAMBDA(a,b,IF(b=C13,a+1)))) 传统公式:{=MAX(FREQUENCY(IF(A$12:A$36=C13,ROW($1:$25)),IF($A$12:$A$36=C13,,ROW($1:$25))))}
以0为例,前三行数据源满足条件,If的是则结果就是逐个累加,第四行起不满足条件,If的否则结果为False,再有满足条件的数字出现会重新从1开始。整列数中的最大值即连续出现最多的次数。
其他类推
示例3:完败的Lookup
带合并单元格的小计
Scan公式:=SUM((SCAN(,A$40:A$48,LAMBDA(a,b,IF(b="",a,b)))=D40)*B$40:B$48) 传统公式:=SUM((LOOKUP(ROW($1:$9),ROW($1:$9)/(A$40:A$48>0),A$40:A$48)=D40)*B$40:B$48)
Scan中的判断,当数据源为空时,返回上一个结果,否则返回自身。
示例4:完败的套路
不规则矩阵转一列
Scan公式:=XLOOKUP(ROW(1:9),SCAN(,COUNTIF(A51:C54,A51:C51),LAMBDA(a,b,a+b)),A51:C51,,1) 传统公式:{=INDIRECT(TEXT(MOD(SMALL(IF(A$51:C$54>0,ROW($51:$54)*100+COLUMN(A:C)*100001,99^9),ROW(A1)),10^4),"r0c00"),)}
Countif部分计算出“甲”“乙”“丙”各自的数量,即3、4、2
Scan部分对上述三个数累加,即3、7、9
用Xlookup查找1-9九个数字在上述三个数字中分别对应“甲”“乙”“丙”的结果。公式结果的大小与查找值一致,即1列9行;查找方式采用精确匹配或下一较大的项,保证查找值为1、2、3时返回的结果是3对应的“甲”,查找值为4-7时返回的结果是7对应的“乙”,查找值为8和9时返回的结果是9对应的“丙”。
总结:嗯,Scan这函数就是来砸场子的!
相关视频:https://v.douyin.com/BUV8BS2/
以下2023-2-6补充:
这人吧,一不小心掉进字母符号堆里,就不容易爬出来了,这不,邓华同学看了我这篇以后,抛出了个超级砸场子的函数:ToCol
咳咳,Scan砸了那么多函数的场子,这下也轮到他被砸场子了。
=TOCOL(A51:C54,1,1)
按你胃,谢谢邓华同学!