前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >认识这对搭档,解决90%的查询问题

认识这对搭档,解决90%的查询问题

原创
作者头像
猴子聊数据分析
修改2020-03-27 17:49:48
7820
修改2020-03-27 17:49:48
举报

在excel里,对于“查找”的实现,vlookup绝对是使用得最为频繁的一个函数。

但是,遇到下面问题,vlookup就没用了。

下面的表格记录了员工的信息,现在想通过“姓名”查找对应的“工号”。如图所示,通过输入不同的姓名,就会返回对应的工号。

在原数据里,“工号”在A列,“姓名”在B列,如果是通过工号来查询对应的姓名,用vlookup函数就能秒杀。但现在是通过B列来查询对应的A列的内容,是发向查询

vlookup函数在查询的时候只能从左往右查询,且查询对象所在的列,必须要在查询区域的第一列,也就是说,只能通过A列来查询B列或其它列,而不能通过B列来反向查询A列。

你可能会说了,把原数据里的A列和B列调换一下顺序不就轻易地避开了上面的问题吗?但是,这样做原始数据就发生了改变,在工作中很多时候我们拿到的表数据,标题中是会有合并单元格的,这就更限制了列的移动。

像这种反向查询问题,就必须祭出我们的“大杀器”了:index+match组合,你就可以更灵活地实现查询。

1.什么是index?

index函数能根据指定的行号和列号来返回一个值。语法规则如下:

index(单元格区域,第几行,第几列)

单元格区域:就是要查找的数据范围;

第几行:在查找范围的第几行;

第几列:在查找范围的第几列。(其中“第几列”是可以省略的。)

对index函数有了基本的认识后,下面通过案例来看下如何使用。

沿用上面案例中的员工信息表,现在想要查询员工“猴子大大”的工号。

要找的工号在A列,姓名“猴子大大”在第7行,所以输入公式=index($A$2:$A$11 , 7)。

也就是告诉index函数,我们要查找的是A2:A11这个区域的第7行的信息,于是返回了正确的工号(A2002)。

聪明的你肯定发现了端倪:我在这儿是用肉眼来看,然后用手指头戳着一个一个数,最后才知道猴子大大位于第7航。

那么,问题就来了。如果数据量非常大,或者要查找的员工非常多,难道我还要靠肉眼来看靠手指来数数吗?

所以,这时候就得要有一个函数来告诉index,让它去取第几个。下面隆重请出index的最佳搭档:match函数。

2.什么是match?

match在英文中是匹配的意思,所以大家应该很自然就能想到它的作用就是进行数据匹配。

匹配什么呢?

就是拿你要查找的值,去指定的区域进行匹配。匹配上了,就会返回目标值所在的单元格位置。它的语法规则是:

match(要查找的值,在哪里找,是否精确匹配)

要查找的值:就是我们想匹配的值。在这个案例中是姓名“猴子大大”;

在哪里找:去哪个区域找想匹配的值。在这个案例中就是去哪里找姓名“猴子大大”,就是要去“姓名”列中找;

是否精确匹配:它有三个选项,-1,0,1。其中,0代表的是精确匹配。在这个案例中是要在“姓名”列精确匹配“猴子大大”,所以选择的值是0。-1表示查找大于等于“要查找的值”。1表示查找小于等于“要查找的值”。

这个案例中,我们愉快地就写下了这样的公式

=match("猴子大大",$B$2:$B$11,0)

返回结果是7,表示匹配到“猴子大大”在姓名列的第7行。

在案例演示中,我们把要查找的猴子大大,放在了单元格H2,所以上面的公式也可以改为:

=match(H2,$B$2:$B$11,0)

返回的结果同样也是7。

3.index+mathch搭档

在最开始的时候,我们靠肉眼来查找来数数。但是现在有了match函数,我们就把这个查找的任务丢给它,让它来传递。因此原本的公式

=index($A$2:$A$11 , 7)

就可以把公式中的7修改成math函数

=index($A$2:$A$11 , match(H2,$B$2:$B$11,0) )

也就是说,使用mathch函数来为index函数的第二个参数提供值,告诉index要返回的是第几个值。

所以,通过index+match函数的组合,我们就可以打造一个下面这样的查询系统啦。

无论你要查找的范围有多大,要查找的量有多少,都是秒秒间就能有结果啦。

(动图中所示的下拉菜单是用“数据验证”来实现的,有关这个功能的用法,可戳链接详细了解)

4.如何实现多条件查找?

上面小试牛刀之后,我们再来进阶一下。index+match的最强大的之处是,它们能实现多条件查找。

上面案例演示中,我们先match出猴子大大在B列的位置,然后再用index返回A列对应的值,得出了对应的工号。但是,如果我还想查询出猴子大大的其它信息呢?如下图:

除了工号,我还想查其对应的“基本工资”“部门”“籍贯”信息。而且,这些信息与数据源的顺序是不一致的。

怎么写公式呢?

有人说,那我就用案例一查询其工号的方法呗,依葫芦画瓢分别再写三个公式,一一来查“基本工资”“部门”“籍贯”信息。

这是一个方法,却是一个很笨的方法。实际工作中,我们面对的可能是很庞大的数据,要查询的列会很多,手动地一个列对应一个公式的写下来,不仅效率低下,还容易出错。

那有没有办法可以只写一次公式,就能返回所有列的结果吗?办法当然是有的。

首先,我们来理清一下:要用index函数来返回值,我们就得告诉它,我们要在指定区域的哪里去找。如要查询“工号”,就得告诉它,要去第1列查找;要查找“基本工资”,就得告诉它,要去第6列查找;要查“部门”,就得告诉它,要去第5列查找。那谁来告诉它呢?用match来告诉它。

match不是最擅长匹配吗?好,就用它来定位位置信息。我们要查询“工号”,我们就用match来匹配,定位到“工号”在数据源里,它是位于第1列;要查询“基本工资”,我们就用match来匹配,定位到“基本工资”在数据源里,它是位于第6列。

把match得到的位置信息就存储起来,然后传给index,index收到定位信息后,就去指定区域对应的位置查询,于是返回对应值,查询结束。

好了,思路清楚后,我们在I2单元格写下公式吧:

=index($A$2:$F$11,              match($H2,$B$2:$B$11,0),              match(I1,$A$1:$F$1,0))

公式解读:我们要在A2:F11这个区域查找,区域这么大,在哪里找呢?给个定位信息吧。好,让match来告诉你横坐标、纵坐标。

根据单元格H2的引用值,用match来匹配“猴子大大”,定位到他所在的行,为第7行,作为横坐标

那纵坐标呢?因为要查他的工号,所以,再用match对“工号”进行匹配,“工号”在数据源A1:A11里,位于第1列,作为纵坐标

好了,在A2:F11的这个区域里第7行第1列交叉处的单元格的值,就为猴子大大的工号信息。对于 “基本工资”的查找,同理,在指定区域的第7行第6列查找;其它信息,依次类推。

因为公式还要往右填充,所以,要把单元格H2进行列的锁定,防止公式在填充过程中发生了列的变化。因此,得出了上面的公式。

再通过“数据验证”使得H2的单元格内容自由选择,就能打造一个查询系统了:

想查询哪个员工的哪些信息,也就只是眨眼的功夫。

5.总结

通过index+match这对搭档,我们可以灵活自如地解决90%的查询问题。match用来定位,index根据定位来返回指定位置的值,你学会了吗?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档