打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Excel中查找时返回全部匹配结果的两种方法
userphoto

2022.07.29 北京

关注

有下面的数据:

需要查找所有苹果的记录:

一般情况下,Excel中查找是通过VLOOKUP进行的,


=VLOOKUP(M3,tblData[[产品]:[计划]],{1,2,3,4},0)

但是,VLOOKUP函数只能返回第一条记录:

而我们需要返回全部(4条)记录:

我们可以使用两种方法解决,详情请看下面的视频:

  1.  INDEX+MATCH

如果你使用Excel 2019及之前的版本,那么可以使用下面的公式:


={INDEX(tblData,SMALL(IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000),{1;2;3;4}),{1,2,3,4,5,6,7})}

这是一个数组公式,如果你的Excel不支持动态数组(即传统Excel版本),就需要使用CTRL+SHIFT+ENTER完成公式的输入;如果支持动态数组,直接输入即可以得到结果。

下面简单解释一下,

我们将上面的公式用代号改写一下:

=INDEX(源数据,满足条件的记录行号,返回的列号)

这个公式是使用INDEX函数完成的,起作用的方式就是从源数据区域中返回指定行号和列号的单元格。

公式中返回的列号使用的是数组:


{1,2,3,4,5,6,7}

表示返回“源数据区域”中的从第1列到第7列的数据,这样就可以返回满足条件的整行数据了。

而“满足条件的记录行号”,是用下面的公式得到的:


SMALL(IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000),{1;2;3;4})

其中的IF部分是个数组:


IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000)

作用是将源数据中的产品列与条件进行比较,所有满足条件的记录返回对应的行号,而不满足条件的记录则返回10000(一个比较大的数值即可)。

可以看出,其中第一个匹配的结果就是上述公式返回2的对应行,这可以通过下面的公式得到:


SMALL(IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000),1)

即通过SMALL函数返回匹配行号数组中第一小的值。

有了这个行号,就可以使用下面的公式返回第一个匹配的行

了:


=INDEX(tblData,SMALL(IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000),1),{1,2,3,4,5,6,7})

而原公式中的SMALL部分,使用数组{1;2;3;4},同时返回前四个最小值:


SMALL(IF(tblData[产品]=M3,ROW(tblData[产品])-2,10000),{1;2;3;4})

这样就可以同时返回这四行记录了。

2. FILTER

上述方案理解起来比较困难,使用时也比较麻烦:需要事先知道有多少满足条件的记录,然后选定结果需要占用的单元格区域,然后用CTRL+SHIFT+ENTER键进行输入。

所以只能是一个在传统Excel版本中的折中方案。

如果使用的是Excel 2021或者Office 365,就可以使用FILTER函数


=FILTER(tblData,COUNTIFS(M3:M3,tblData[产品]))

直接对源数据进行筛选,条件是产品列是否在条件区域出现过。

很简单的一个公式就可以解决问题,而且可以筛选满足多个条件的全部记录。


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel中一对多查找,不用vlookup函数用什么?
一对多查找,用 Vlookup 函数太Out了!
INDEX+SMALL+IF+ROW函数组合使用解析
Vlookup函数一对多查找
14学Excel函数,怎能不会这个经典的查询套路?
记住43个Excel函数的用法,掌握数据分析 ( 一 )
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服