Excel中利用FILTER和BYROW函数实现多列重复值查找的实例教程
脚本之家
在之前的教程中,我们利用XLOOKUP函数等技巧实现了在Excel中任意列的查找功能,能够返回同一行中对应列的值。但面临一个问题:当查找的值在多列中重复出现时,如何才能找到并返回所有匹配的结果呢?
问题背景与需求
以图1为例,我们希望在B列至C列中查找“郭靖”这个值。显然,第3行和第7行都包含了“郭靖”,但使用之前的方法,我们只能获取到第3行的结果。那么,如何才能获取到所有的匹配项呢?
如何获取所有包含“郭靖”的列中对应行的数据呢?
使用FILTER函数实现查找
这可以通过使用FILTER函数来实现。在单元格B10中输入以下公式:
=FILTER(A2:A7, BYROW(B2:J7, lambda(row, row=B9)))
执行后,结果将如图2所示,展示出所有包含“郭靖”的行中的A列数据。
该公式运用了BYROW函数进行逐行比较,并结合了OR运算来处理每行的比较结果。BYROW函数会产生一个包含TRUE或FALSE值的数组,其中与单元格B9内容相匹配的行将返回TRUE,其余则返回FALSE。随后,FILTER函数会基于这个TRUE/FALSE数组,从A2:A7范围内提取出所有TRUE值对应的行,从而得到图2所示的结果。
FILTER+BYROW函数组合筛选数据
1、FILTER+BYROW函数组合实现快速对表格数据进行筛选
公式:
=VSTACK(A1:F1,FILTER(A2:F6,BYROW(B2:F6,SUM)>0))
2、BYROW+FILTER函数对多列数据求和筛选最大值
公式:
=LET(b,BYROW(B3:D8,SUM),FILTER(HSTACK(A3:A8,b),b=MAX(b)))
3、FILTER+BYROW函数组合筛选出有数据于60的人员姓名
公式:
=FILTER(A2:A6,BYROW((B2:D6<60)*(B2:D6),SUM))
4、FILTER+BYROW函数组合筛选出不为空的单元行
公式:
=FILTER(A1:B15,BYROW(ISNUMBER(FIND({"手机号","身份证","银行卡"},B1:B15))*1,SUM))
推荐阅读: