[注意] 两个函数各司其职
- MATCH:返回某个值在区域中的位置(第几行/列)。语法:
=MATCH(查找值, 区域, 匹配类型) - INDEX:根据位置返回区域中对应的值。语法:
=INDEX(区域, 行号, [列号])
[目标] 组合公式结构
=INDEX(返回列, MATCH(查找值, 查找列, 0))MATCH找到查找值在查找列中的行位置,INDEX根据这个位置从返回列中取值。
[详解] 参数详解
MATCH函数
- 查找值:要找的内容。
- 区域:查找范围(通常是一行或一列)。
- 匹配类型:0精确匹配;1小于(区域升序);-1大于(区域降序)。
INDEX函数
- 区域:要返回数据的范围(可以是一列、一行或一个表格)。
- 行号:在第几行取值。
- 列号:可选,当区域是多列时指定第几列。
[数据] 案例1:解决VLOOKUP无法向左查找的问题
数据表:A列是销售额,B列是产品ID,C列是产品名称。想根据产品ID(B列)查找产品名称(C列),但VLOOKUP要求查找列在第一列。使用INDEX+MATCH:
=INDEX(C:C, MATCH(E2, B:B, 0))解释:MATCH(E2, B:B, 0) 找到E2的产品ID在B列中的行号(例如第3行),INDEX(C:C, 行号)返回C列该行的产品名称。
[数据] 案例2:双向查找(根据行和列条件)
有一个二维表:行是销售员,列是月份,值是销售额。想根据“张三”和“3月”查找销售额。
=INDEX(B2:E10, MATCH("张三", A2:A10, 0), MATCH("3月", B1:E1, 0))解释:第一个MATCH找到“张三”在第几行,第二个MATCH找到“3月”在第几列,INDEX根据行列位置返回交叉点的值。
[工具] 进阶:动态列匹配
假设你想根据下拉菜单选择月份,自动返回对应列的数据:=INDEX(B2:E10, MATCH("张三", A2:A10, 0), MATCH(G1, B1:E1, 0)),其中G1是月份选择单元格。
[警告] 注意事项
- MATCH的匹配类型0要求精确匹配,如果找不到会返回#N/A。
- INDEX区域和MATCH区域的行数/列数要对应。
- INDEX+MATCH比VLOOKUP计算稍慢,但灵活性强。