MATCH函数精确匹配 办公技巧 22年11月8日 编辑 汪站长职场达人 取消关注 关注 私信 基础语法 MATCH函数的作用是查找某目标值在一行或一列区域中的位置,它的基础语法如下。 MATCH(lookup_value,lookup_array,[match_type]) 参数lookup_value代表的是要查找的目标值,参数lookup_array代表的是查找的区域或数组,注意只可以是一行或一列,不可是多行或多列的情况。参数match_type指定的是查找方式,MATCH有以下3种查找方式。 (1)数字0代表精确匹配,本篇着重讲这个参数。 (2)数字1代表模糊匹配,要求查找区域必须升序排列,查找的时候执行“二分法”策略,本书第9篇会专门介绍。 (3)数字-1代表模糊匹配,要求查找区域必须降序排列,查找时是按照从上到下或从左到右的遍历查找方式。在实际工作中,基本上不会用到-1这个参数,所以本章不讲这个参数,大家仅做了解即可。 查找目标值在一列或一行中的位置 MATCH函数可以查找目标值在一维区域中的位置。 1.对于纵向区域查找 如图26-1所示,D13:D20是数据区域。 ENTERTITLE 图26-1纵向区域查找 在F14单元格中输入公式: =MATCH(“黄承彦”,$D$13:$D$20,0) 这是查找目标值“黄承彦”在D13:D20单元格区域的位置,返回结果为3。在G14单元格中输入公式: =MATCH(“郭嘉”,{“许褚”;”张飞”;”黄承彦”;”徐庶”;”郭嘉”;”黄权”;”马超”;”庞统”},0) 查找“郭嘉”在数组中的位置,返回结果为5。MATCH函数的第2个参数不仅支持单元格区域,还支持数组的查找。 注意:注意,第3个参数数字0,表示精确匹配。大家在函数初学阶段,千万不要盲目地省略参数、字符,我们在工作中运用函数的目的是“偷懒”,但前提要准确。 2.对于横向区域查找 MATCH函数的查找区域不仅可以是一列纵向数据,还可以是一行横向数据,如图26-2所示,D23:K23是数据区域。 ENTERTITLE 图26-2横向区域查找 在F26单元格中输入公式: =MATCH(“张飞”,D23:K23,0) 查找“张飞”在这个横向区域的位置,返回结果为2,同样别忘了MATCH函数的第3个参数写数字0。 在G26单元格中输入公式: =MATCH(“马超”,{“许褚”,”张飞”,”黄承彦”,”徐庶”,”郭嘉”,”黄权”,”马超”,”庞统”},0) 数组中用逗号分隔表示横向排列,查找“马超”在数组中的位置,返回结果为7。 总结:MATCH查找的是位置,返回的结果是数字。 那么MATCH函数有没有返回结果不是数字的情况?有。例如,第2个参数是一个多行多列的区域: =MATCH(“张飞”,D23:K24,0) 这里第2个参数是一个2行8列的区域,所以返回结果为#N/A。当查找区域中不包含查找值的情况下,也会返回错误值#N/A。例如: =MATCH(“宋江”,D23:K23,0) INDEX加MATCH组合完成各种方式的查找 通过之前的学习,我们发现INDEX函数的第2个、第3个参数都是数字,而MATCH的结果恰好是数字,把它们有效地结合在一起,可以完成很多事情。现在就让它们来完成各种查询操作,如图26-3所示,A1:G9单元格区域是基础数据源,其中A列是部门,B列是员工号,C列是姓名,D~G列是基本工资、绩效奖、加班费及总工资。 ENTERTITLE 图26-3查找数据源 1.案例:常规查找 根据不同的员工号,查找每个员工号对应的姓名,首先在K3单元格中输入以下公式,查找各个学号在数据源中的位置。 =MATCH(J3,B:B,0) 做精确匹配,千万不要忘记写MATCH的第3个参数0。返回结果为2,说明员工号201位于表格B列的第2行,然后就可以利用INDEX函数来引用这个数字,得到相应姓名,于是将公式写成:=INDEX(C:C,MATCH(J3,B:B,0)) 返回结果为“马岱”,将K3单元格的公式向下复制到K5单元格。利用MATCH函数找到位置,然后用INDEX函数去提取相应位置的信息,这就是我们常用的“套路”,计算过程如图26-4所示。 ENTERTITLE 图26-4常规查找 2.案例:文本数字查找 根据员工号查找对应人员的总工资,J8:J10单元格区域是相应的员工号信息。在K8单元格中输入公式“=INDEX(G:G,MATCH(J8,B:B,0))”,然后将公式向下复制到K10单元格。在K8单元格中很顺利的查找到相应的结果,而K9、K10都是错误值#N/A,如图26-5所示。 ENTERTITLE 图26-5文本数字查找错误方式 接下来仔细检查一下公式上有没有编写错误。在J9、J10单元格的左上角都有个小的“绿帽子”,这种“绿帽子”的错误提示通常表示单元格数据是文本型数字,我们打开【公式求值】分步计算看看结果,如图26-6所示。 ENTERTITLE 图26-6公式求值步骤 在求值的步骤中,可以看到MATCH函数的第一个参数为”204″,带了双引号,说明是文本型数字。在MATCH匹配的过程中,要求数据类型一致,基础数据源的员工号列都是数字,所以查找不到这个文本值。把文本型转化为数值型,减负就可以了,如图26-7所示,于是K8单元格的公式变为:=INDEX(G:G,MATCH(–J8,B:B,0)) 虽然可以通过公式处理这种特殊的情况,但尽量还要保证数据类型的一致性。一个好的数据源,可以为以后的统计省去很多麻烦。 3.案例:查无此人 同样是根据员工号查找姓名,J13:J15单元格区域是查找的数据源。在K13单元格中输入公式“=INDEX(C:C,MATCH(J13,B:B,0))”,并向下复制到K15单元格,看到K15单元格得到错误值#N/A,如图26-8所示。 ENTERTITLE 图26-8查无此人步骤1 通过检查,发现基础数据源中员工号是201~208,没有209这个员工号,所以“查无此人”,具体的函数公式怎么写呢?K15单元格是错误值,如果(IF)错误(ERROR)了,怎么办?刚好有一个函数是IFERROR,于是,函数公式完善为: =IFERROR(INDEX(C:C,MATCH(J13,B:B,0)),”查无此人”) IFERROR函数的语法为: IFERROR(value,value_if_error) IFERROR函数的作用是当第1个参数value为错误值的时候,就执行第2个参数value_if_error语句,如果value不是错误值,结果就返回value本身。所以对于原K15单元格的错误值,就返回相应的结果“查无此人”,效果如图26-9所示。 ENTERTITLE 图26-9查无此人步骤2 有人对于ISERROR函数和IFERROR函数总是弄混。其实我们不用死记硬背它们的语法,从英文翻译上理解即可。 ISERROR中,IS英文意思为“是”,放在前面表达疑问语态“是不是”,后面跟一个ERROR,就是在问“是不是错误”,只需要回答“是”或“不是”就可以,所以它的结果就是TRUE或FALSE。 IFERROR中,IF表示“如果”,整个意思就是“如果错误”,如果错误的,一般都隐含一句话“怎么办”,所以这个时候就不能只回答“是”或“不是”,而要拿出解决方案,也就是IFERROR的第2个参数。 4.案例:查找一系列值 前面都是根据目标值返回一个对应结果,我们想根据一个查找目标值,返回它的一系列对应值时怎么办,如图26-10所示,根据J18:J20单元格区域的姓名,返回他们的各项工资明细。 ENTERTITLE 图26-10查找一系列值 写公式还是需要一步步来完成,在K18单元格中输入公式:=INDEX(D:D,MATCH(J18,C:C,0)) 可以得到黄月英的基本工资为6200元,然后将公式向右向下复制。注意,只要涉及公式复制就必须想到“图钉”的问题。 首先是D:D,向右复制需要变成E:E、F:F,以引用不同的工资科目,所以不加“图钉”。然后是J18,向右复制始终要引用J列的姓名,而向下复制则要变成J19、J20,所以要把J用“图钉”按住,变成$J18。 最后是C:C,是数据源中的姓名列,要用“图钉”按住,所以完善公式为:=INDEX(D:D,MATCH($J18,$C:$C,0)) 最后将公式复制到K18:N20单元格区域。其实公式没有脱离原来最初的结构,只是巧用了“图钉”来完成一系列值的查找,这样就不用在每一列单独写一个公式了。 5.案例:逆向查找 可能很多人都用过VLOOKUP函数,它的强大功能使它几乎成了Excel函数的代名词,然而它的缺陷是只能正向查找。后来被高手开发出了VLOOKUP+IF的逆向查找方式,但是这种方式不适合日常的使用,具体用法我们会在30.3节讲解。 本章讲的INDEX+MATCH是解决逆向查找的好方法,如图26-11所示,根据J23:J25单元格区域的姓名,查询每个人对应的部门及员工号。 ENTERTITLE 图26-11逆向查找 在K23单元格中输入公式“=INDEX(A:A,MATCH(J23,C:C,0))”,按上“图钉”,将公式完善为: =INDEX(A:A,MATCH($J23,$C:$C,0)) 然后将K23单元格的公式复制到K23:L25单元格区域。通过仔细观察会发现,本案例的公式与上一案例的公式基本一致,看着很难的逆向查找操作,用了INDEX+MATCH函数公式后完全零难度。 ·END· 微信扫一扫加关注,Office自学网官方微信公众号, 专注分享软件安装和视频教程,让你一号在手,办公无忧! 给TA打赏 共{{data.count}}人 人已打赏