【ExcelPlanet】index & match,就这样自如地查询数据

在这里插入图片描述
在excel里,对于“查找”的实现,vlookup绝对是使用得最为频繁的一个函数。
但是,遇到下面问题,vlookup就没用了。

下面的表格记录了王者荣耀英雄的信息,现在想通过“name”查找对应的“id”。如图所示,通过输入不同的英雄名,就会返回对应的“id”。
在这里插入图片描述
在原数据里,“id”在A列,“name”在B列,如果是通过id来查询对应的name,用vlookup函数就能轻松解决。但现在是通过B列来查询对应的A列内容,是反向查询

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

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

像这种反向查询问题,就需要请出我们今天的主角了:index+match组合,你就可以更灵活地实现查询。

1.什么是index?

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

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

单元格区域:就是要查找的数据范围;
第几行:在查找范围的第几行;
第几列:在查找范围的第几列。(其中“第几列”是可以省略的)

对index函数有了基本的认识后,下面通过案例来看下如何使用。
沿用上面案例中的英雄信息表,现在想要查询英雄“白起”的id。
在这里插入图片描述

要找的id在A列,name“白起”在第13行,所以输入公式:
=index($A$1:$A$70 ,14)
($表示绝对引用,复制公式时不会改变引用区域)
也就是告诉index函数,我们要查找的是A1:A70这个区域的第14行的信息,于是返回了正确的id(10012)。

聪明的你肯定发现了端倪:我在这儿是用肉眼来看,然后用手指头戳着一个一个数,最后才知道白起位于第14行。
那么,问题就来了。如果数据量非常大,或者要查找的人员非常多,难道我还要靠肉眼来看靠手指来数数吗?
所以,这时候就得要有一个函数来告诉index,让它去取第几个。下面隆重请出index的最佳搭档:match函数。

2.什么是match?

match在英文中是匹配的意思,所以大家应该很自然就能想到它的作用就是进行数据匹配。
匹配什么呢?
就是拿你要查找的值,去指定的区域进行匹配。匹配上了,就会返回目标值所在的单元格位置。它的语法规则是:

  • match(要查找的值,在哪里找,是否精确匹配)
  • 要查找的值:就是我们想匹配的值。在这个例子中是name“白起”;
  • 在哪里找:去哪个区域找想匹配的值。在这个例子中就是去哪里找“白起”,就是要去“name”列中去找;
  • 是否精确匹配:它有三个选项,-1,0,1。其中,0代表精确匹配,在这个例子中要在“name”列精确匹配“白起”,所以选择的值是0。-1表示查找大于等于“要查找的值”,1表示查找小于等于“要查找的值”。

在这个例子中,我们愉快的写下了这样的公式:
=match(“白起”,$B$1:$B$70,0)
返回结果是14,表示匹配到“白起”在name列的第14行。

在案例演示中,我们把要查找的白起,放在了单元格J2,所以上面的公式也可以改为:
=match($J2,$B$1:$B$70,0)
返回的结果同样也是14。

3.index+match一起来

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

就可以把公式中的7修改成math函数:
=index($A$1:$A$70 ,match($J2,$B$1:$B$70,0))

也就是说,使用mathch函数来为index函数的第二个参数提供值,告诉index要返回的是第几个值。
所以,通过index+match函数的组合,我们就可以打造一个下面这样的查询系统啦。
在这里插入图片描述
(动图中所示的下拉菜单是用“数据验证”来实现的)

4.如何实现多条件查找

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

上面案例演示中,我们先match出白起在B列的位置,然后再用index返回A列对应的值,得出了对应的id。但是,如果我还想查询出白起的其它信息呢?如下图:
在这里插入图片描述
除了id,我还想查其对应的“role_main”,“hp_max”,“attack_range”信息。而且,这些信息与数据源的顺序是不一致的。

怎么写公式呢?

有人说,那我就用案例一查询其id的方法呗,依葫芦画瓢分别再写三个公式,一一来查“role_main”,“hp_max”,“attack_range”信息

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

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

首先,我们来理清一下:要用index函数来返回值,我们就得告诉它,我们要在指定区域的哪里去找。如要查询“id”,就得告诉它,要去第1列查找;要查找“role_main”,就得告诉它,要去第8列查找;要查“hp_max”,就得告诉它,要去第3列查找。那谁来告诉它呢?用match来告诉它。

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

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

好了,思路清楚后,我们在K2单元格写下公式吧:
=index($A$1:$H$70 ,
match($J2,$B$1:$B$70,0),
match(K$1,$A$1:$H$1,0))

公式解读:我们要在A1:H70这个区域查找,区域这么大,在哪里找呢?给个定位信息吧。好,让match来告诉你横坐标、纵坐标。
在这里插入图片描述
根据单元格J2的引用值,用match来匹配“白起”,定位到他所在的行,为第14行,作为横坐标。

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

好了,在A2:H70的这个区域里第14行第1列交叉处的单元格的值,就为白起的id信息。对于“role_main”的查找,同理,在指定区域的第14行第8列查找;其它信息,依次类推。

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

再通过“数据验证”使得J2的单元格内容下拉选择,就能打造一个查询系统了:
在这里插入图片描述
想查询哪个英雄的哪些信息,也就只是眨眼的功夫。

5.禅定时刻

通过index+match这对好搭档,我们可以灵活自如地解决90%的查询问题。match用来定位,index根据定位来返回指定位置的值。希望以上内容对你有帮助。

数据附件:
链接:https://pan.baidu.com/s/1q7jhkJA7_NWxtokxFJSW2w
提取码:xr45

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值