在新增的函数中,有一个看上去好象没什么用的函数,它就是ByRow。其实,它是一个宝藏函数,在筛选数据时超级实用。
一、作用
Excel是这么介绍的:将Lambda函数应用于第一行并返回结果的数组。
估计大部分看了上面的说明都会一头雾水:它和lambda函数有什么关系,为什么要提到它?先别急,向后看。
二、语法及参数说明
=Byrow(数组,Lambda(自定义参数,调用内置函数运算表达式))
数组:可以是多行多列的一组数(内存数组),也可以是单元格区域引用。Lambda:用来调取数组的每一行值进行运算自定义参数:可以自定义一个变量,逐一调取数组的每一行值。调用内置函数运算表达式:可以调用内置函数对自定义参数调取的行值进行求和、计数等运算。注意:当调用的函数参数只需自定义参数时(比如Sum、Count、or),则lambda()可以用该函数名称替代。例:Lambda(x,sum(x))可以用Sum替换,Byrow的语法可以简写为=Byrow(数组,函数名称)三、示例
【例1】如下图所示,要求在E列计算1~6月A产品和B产品的合计
=BYROW(B2:C7,LAMBDA(X,SUM(X)))
公式说明:
B2:C7:引用的单元格区域X:自定义的参数,这里也可以A、B、D,你、我、他等字符(自己起的名称),但不能用C和R。用X可以逐行调取B2:C7中的每一行值。SUM(X):调用SUM函数对X(数组的每一行)进行求和至此,同学们应该对Byrow的基本用法有所了解。接下来就是高能时刻了。介绍两个配合filter完成高难度筛选的示例,你就知道Byrow有多好用。
【例2】如下图所示,要求从左表中筛选刘国崇、王爱民和何长龙3人的消费记录。
G2公式:
=FILTER(A2:C22,BYROW(B2:B22={"王爱民","何长龙","刘国崇"},OR))
上面公式估计很多同学看不懂,兰色把公式拆分开来,看看byrow的运算原理。
B2:B22={"王爱民","何长龙","刘国崇"}
让B列的姓名和给定的姓名一一对比是否一样。由于{"王爱民","何长龙","刘国崇"}是一个多列数组(用,间隔是多列,用;间隔是多行)。所以得到了一个多行3列的结果。
某一行中只要有一个TRUE,就是要筛选的行,所以首先要想到用OR(条件1,条件2...)函数,而Byrow恰好可以逐行运算,所以它们俩个结合就可以完成逐行判断。
这...不就是filter第二个参数的判断条件吗?嘿嘿!
再看一个前天兰色遇到的一个提问,涉及匹配筛选。
【例3】如下图所示,要求从A列筛选出含鸡、梨、米和豆的所有行,结果如F列所示。
=FILTER(A2:A5867,BYROW(FIND(TOROW(D2:D5),A2:A5867),COUNT))
上面公式中,首要先用torow把D列关键字转换成列方向,这样才能让A列值和关键字逐一对比
=TOROW(D2:D5)
用find查找关键词在A列每个单元格是否存在,每行都会有4个查找结果。
只要有一个数字,说明A列该行值至少包含某一个关键词,就是我们要筛选的结果。而byrow配合Count恰好可以逐行统计数字个数。
=BYROW(FIND(TOROW(D2:D5),A2:A5867),COUNT)
最后把这个判断式放在filter的第2个参数,就可以筛选出正确的结果了。