INDEX和MATCH组合起来可以做到真正的自由定位、精确取数,在Excel里被看作是最有效的查找方法之一。它可以很好地结合MATCH函数的动态定位能力和INDEX函数的灵活取值能力,并且不受查找列是否位于数据区左边以及表格增加或删除列时出错的影响;既可以按照从左到右或者从右到左的方式进行查找,也可以根据年份和季度双重条件来获取跨列的数据;还可以随着下拉列表的变化而自动更新结果。它的基本原理就是用MATCH函数得到行号和列号之后再用INDEX函数从中取出所需要的数据,整个过程非常严密并且很容易扩展使用范围。因此它是专业人士用来代替VLOOKUP的最佳选择。

一、基本二维查找:根据姓名和月份来确定销售额
以员工销售表为例,A2:A6是姓名列、B1:F1是月份标题行、B2:F6是对应的销售额数据。在B10中输入姓名“张三”,A10中输入月份“3月”,那么公式就是=INDEX(B2:F6,MATCH(B10,$A$2:$A$6,0),MATCH(A10,$B$1:$F$1,0))。其中MATCH函数第三参数要设为0(精确匹配),并且所有的查找范围都要使用绝对引用(比如$A$2:$A$6),防止下拉填充的时候范围发生变化;如果姓名或者月份输入错误的话,公式会返回#N/A,在此情况下可以嵌套IFERROR来处理,例如=IFERROR(......,"未找到")。
第二条 多条件组合查询:年份和季度同时被选定之后再进行销售金额的查询
如果把数据按照年份放在A列、季度放在B列、销售额放在C列来排列的话,则需要同时符合以下两点:公式的形式是:=INDEX(C2:C100,MATCH(1,(A2:A100=E2)*(B2:B100=F2),0)),该公式属于数组公式,在Excel 365或者2021版本下可以直接按下回车键完成输入,而在老版本中则要先按住Ctrl+Shift再点击Enter键才能生效。其中E2代表的是年份,F2表示的是季度;括号内的逻辑判断会产生一个由TRUE和FALSE组成的数组,MATCH函数使用数字1来查找第一个TRUE的位置。一定要保证A列和B列中的行数完全一样,不然就会出现错误提示。
第三种方式就是用客户的ID来推算出公司的名字
如果客户的ID位于D2到D100之间,公司的名字位于A2到A100之间的话,在G2处输入客户ID之后,在H2处填写的内容为=INDEX(A2:A100,MATCH(G2,D2:D100,0))。此方法可以避免VLOOKUP不能从左边查找的问题,并且不会因为左边多出一列而导致失效。在使用的时候最好给D列做一下去重校验,以防出现相同的ID造成匹配的结果不可靠。
第四种是动态列引用,和下拉列表一起使用可以产生相应的反应
K1中选择年份下拉框的数据验证来源是年份列,L1中选择季度下拉框的数据验证来源是季度行,M1作为结果单元格。公式为=INDEX(销售额区域,MATCH(K1,年份列,0),MATCH(L1,季度行,0))。所有的区域都用结构化的引用或者绝对引用来表示,这样当下拉框的选择发生变化的时候,行列索引会自动更新,并且结果可以以毫秒的速度刷新出来。
第五部分 常见避坑要点及改进意见
MATCH 函数缺少第三个参数 0 是一个很常见的错误,它会使得几乎相同的匹配产生偏差;INDEX 函数的数据区域和列/行范围要和 MATCH 函数返回的列/行号完全一致;跨工作簿引用的时候要用单引号把工作簿名括起来,并且用感叹号隔开,比如 'Sales'!B2:F6;对于大数量级的数据(超过十万行)的情况下,可以关闭自动计算或者用 LET 函数来包装中间变量以提高效率。
因此INDEX+MATCH不能代替VLOOKUP,而要成为可以被修改、扩充和审查的数据查找系统的基础部分。






评论区 (0)
暂无评论,快来抢沙发吧!
发表评论