Menu

Excel INDEX MATCH:反向查找、双向查找,所有版本通用

=INDEX(C2:C6,MATCH(F2,A2:A6,0)) 在 A 列中找到 F2 所在的行,并返回 C 列同一行的值。它能向左查找、做双向查找,而且在所有 Excel 版本中都能用。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=INDEX(C2:C6,MATCH(F2,A2:A6,0)) 找到 F2 在 A2:A6 中所在的行,并返回 C2:C6 同一行的值。MATCH 负责找位置,INDEX 负责取出这个位置上的值。它在所有 Excel 版本中都能用,而且可以向左查找。

某个产品的价格
G2
ABCDEFG
1ProductCategoryPriceCodeLook forPrice
2AppleFruit$1.20P-101Pear$1.50
3PearFruit$1.50P-102
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

把 F2 改成 Milk,G2 会返回 $1.10。把 C2:C6 改成 B2:B6,它就会改为返回类别。

INDEX 和 MATCH 如何配合

这个公式是把两步放在一个单元格里。这里把它们拆到不同的单元格中,你可以看到每一部分返回什么。

两个步骤,各占一个单元格
G3
ABCDEFG
1ProductCategoryPriceCodeLook forBread
2AppleFruit$1.20P-101Position4
3PearFruit$1.50P-102Price$2.40
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

MATCH(G1,A2:A6,0) 返回 4,因为 Bread 是 A2:A6 中的第四项。INDEX(C2:C6,4) 返回 C2:C6 中的第四项 $2.40。把 MATCH 放进 INDEX 里替换 G2,就得到了单个单元格的公式。要让它正常工作,有两条规则:

  • 两个区域必须从同一行开始,并且高度相同。 MATCH(...,A2:A6,0) 从第 2 行开始计数,所以 INDEX 必须读取 C2:C6,而不是 C1:C6(那样会返回上一行)。
  • MATCH 要以 0 结尾。 不写 0,MATCH 会做近似匹配,假定 A 列已经排好序;在一列名称中,它可能返回错误行的位置。MATCH 一文讲解了它的三种匹配类型。

如果值不在列表中,MATCH 会返回 #N/A,整个公式也会返回 #N/A。=IFNA(INDEX(C2:C6,MATCH(F2,A2:A6,0)),"Not found") 会改为显示文本。

向左查找

VLOOKUP 只能返回查找列右边的列。INDEX 和 MATCH 不在乎列的顺序:可以在 D 列中查找,返回 A 列的值。

根据代码查产品名称
G2
ABCDEFG
1ProductCategoryPriceCodeCodeProduct
2AppleFruit$1.20P-101P-310Bread
3PearFruit$1.50P-102
4CarrotVegetable$0.80P-205
5BreadBakery$2.40P-310
6MilkDairy$1.10P-412
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

P-310 返回 Bread。在 F2 中输入 P-205 会得到 Carrot。如果用 VLOOKUP,你得先把 Code 列挪到表格最前面。

双向查找:INDEX 搭配两个 MATCH

INDEX 接受一个行号和一个列号。给它一整张表,让一个 MATCH 找行,另一个 MATCH 找列。

按地区和月份查询销售额
B8
ABCD
1RegionJanFebMar
2North4,2003,9004,800
3South3,1003,6003,300
4East5,2004,7005,600
5West2,8003,0003,400
6RegionEast
7MonthMar
8Sales5,600
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

East 是 A2:A5 中的第 3 行,Mar 是 B1:D1 中的第 3 列,所以 INDEX 返回 B2:D5 中第 3 行第 3 列的值:5,600。找行的 MATCH 沿第一列向下查找,找列的 MATCH 沿标题行横向查找,两个区域都与表格 B2:D5 对齐。

INDEX MATCH 为什么比 VLOOKUP 好

=VLOOKUP(F2, A2:D6, 3, FALSE)
=INDEX(C2:C6, MATCH(F2, A2:A6, 0))

两个公式都返回价格。区别在表格发生变化时才显现出来:

  • 插入列。 在 Category 和 Price 之间插入一列,VLOOKUP 仍然要第 3 列,而第 3 列现在是新插入的空列。在 INDEX 版本中,Excel 会把 C2:C6 自动调整为 D2:D6,公式照常工作。
  • 向左查找。 上面已经演示过:VLOOKUP 做不到,INDEX MATCH 可以。

在 Excel 2021 和 Microsoft 365 中,XLOOKUP 用一个函数、更简单的参数就能同时做到这两点。如果文件需要在 Excel 2019 或更早版本中打开,INDEX MATCH 仍然是首选,而且 INDEX 本身单独使用也很有用。如果要同时按两个条件查找,见多条件查找。

练习:向左查找

库存导出表
G2
ABCDEFG
1CodePriceStockProductLook forPrice
2P-101$1.2040AppleMilk
3P-102$1.5025Pear
4P-205$0.8060Carrot
5P-310$2.4015Bread
6P-412$1.1030Milk
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 产品名称在最后一列。在 G2 中用 INDEX 和 MATCH 返回 F2 中产品的价格。

练习:双向查找

考试成绩
B9
ABCD
1StudentMathScienceArt
2Ana788592
3Ben647188
4Cara958973
5Dev826779
6
7StudentCara
8SubjectScience
9Score
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 在 B9 中返回 B7 中的学生在 B8 中科目上的分数。

常见问题

INDEX MATCH 是怎么工作的?

MATCH 找到某个值在一列中的位置,INDEX 返回另一列中这个位置上的值。在 =INDEX(C2:C6,MATCH("Pear",A2:A6,0)) 中,MATCH 返回 2,因为 Pear 是 A2:A6 中的第二项,然后 INDEX 返回 C2:C6 中的第二项。

为什么用 INDEX MATCH 而不是 VLOOKUP?

它可以返回查找列左边的列,而且在表格中插入列时也不会出错(没有会过时的列号)。在 Excel 2021 和 Microsoft 365 中,XLOOKUP 用一个函数就能带来同样的好处。

MATCH 中的 0 是什么意思?

它表示要求精确匹配。不写它的话,MATCH 会使用 match_type 1,也就是假定该列已按升序排列的近似匹配;在未排序的列表中,它可能返回错误行的位置。

怎样用 INDEX MATCH 做双向查找?

给 INDEX 一整张表和两个 MATCH,一个找行,一个找列:=INDEX(B2:D5,MATCH("South",A2:A5,0),MATCH("Feb",B1:D1,0)) 返回 South 行与 Feb 列交叉处的值。

Coddy 编程语言插图

和 Coddy 一起学编程

开始