一般来说,VLOOKUP能够解决的问题,INDEX+MATCH都可以处理。
另一方面,如果VLOOKUP能轻松解决的问题,基本也没有必要换用INDEX+MATCH,所以我只是从中择选了几个VLOOKUP不方便解决的示例……
比如横向和逆向场景下的各种查询。
本章概要:
1)逆向查询
2)模糊查询
3)横向查询
4)交叉表查询
5)多条件查询
6)动态表查询
7)按名称动态引用图片
8)示例文件下载
1 逆向查询
如下图所示,需要根据E列的姓名查找其对应的学号。
F2公式如下:
=IFERROR(INDEX(A:A,MATCH(E2,B:B,0)),"")
2)模糊查询
如下图所示,需要根据E列的姓名查找其对应的学号。和上个例子所不同的是,姓名和数据源的姓名是模糊匹配关系。
F2公式如下:
=IFERROR(INDEX(A:A,MATCH(""&E2&"",B:B,0)),"")
MATCH函数支持使用通配符,通配符星号可以代表0到多个字符,""&E2&""也就代表包含E2单元格数据的字符串,以此作为MATCH函数的查询条件。
INDEX函数按照MATCH函数的计算结果,按位置取值。最后使用IFERROR将错误值屏蔽为假空。
3) 横向查询
如下图所示,需要查询李清照在几号房?
公式如下:
=INDEX(1:1,MATCH("Excel",2:2,0))
MATCH函数获取"李清照"在第二行首次出现的位置,INDEX按位置取值。重复一个知识点:当INDEX函数的查询范围为单行,同时省略第3参数时,第2参数默认为第几列,而不是原来的第几行。
4)交叉表查询
如下图所示,需要在B14单元格,查询指定负责人和月份的销售额。
公式如下:
=INDEX(A1:F10,MATCH(B13,F:F,0),MATCH(B12,1:1,0))
INDEX函数的查询范围是A1:F10区域。
公式嵌套了两个MATCH函数;第一个MATCH函数查询负责人在F列的位置,也就是目标值在查询范围的第几行;第二个MATCH函数查询“1月”在第2行的位置,也就是目标值在查询范围的第几列。
最后使用INDEX函数按坐标取值即为结果。
5)多条件查询
如下图所示,需要在G列,查询同时符合部门和班组的销售金额。
G2数组公式如下:
=INDEX(C:C,MATCH(E2&F2,A8&B8,0))
这是一条数组公式,需要同时按Ctrl+Shift+Enter三键结束公式输入。
MATCH函数使用了多项运算,将A8 和 B8 两列区域的数据合并成一列字符串,从中匹配查询E2&F2首次出现的位置,最后使用INDEX函数按位置取值。
注意MATCH函数的第2参数需要绝对引用喔~以防止公式向下复制填充时,计算范围发生变形。
该公式总结套路如下:
=INDEX(结果列/行,MATCH(条件1&条件2&条件n,条件区域1&条件区域2&条件区域n,0))
但需要说明的是,这个套路并没有太大的实际使用价值。
被INDEX+MATCH组合打败的VLOOKUP函数,LOOKUP,它更擅长处理多条件查询的问题。
6)动态表查询
如下图所示,需要在查询表,根据B1单元格指定的表名、B2单元格指定的月份、以及A列所指定的负责人信息,在分表中查询相关数据。
C3单元格公式如下:
=INDEX(INDIRECT(B1&"!G:G"),0),MATCH(B1&"!1:1"),0))
这是一条普通公式,只是嵌套稍多,先了解即可。
由于牵扯到动态表查询计算的问题,照例使用了INDIRECT函数。以INDIRECT(B1是表名,"A:G"是查询区域。B$1&"!A:G"也就是指定表的查询区域的地址,使用INDIRECT函数将地址转换为单元格引用。
和示例4相同,公式使用了两个MATCH函数确定目标值在查询区域的行和列的坐标。最后使用INDEX函数按位置取值。
INDEX+MATCH函数组合固然比VLOOKUP强大百倍,但VLOOKUP的哥哥lookup同样也比INDEX+MATCH函数强大百倍……