ZetCode

Excel MATCH 函数

最后修改于 2025 年 4 月 4 日

MATCH 函数在单元格区域中搜索指定项,并返回其相对位置。这个强大的查找函数经常与 INDEX 结合使用,以实现高级查找。本教程涵盖 MATCH 的语法、匹配类型、实际示例和常见用法。

MATCH 函数基础

MATCH 在区域中定位查找值的位置。与 VLOOKUP 不同,它返回的是位置而不是值本身。这使其在动态查找方面更加灵活。

组成部分 描述
函数名称 MATCH
语法 =MATCH(lookup_value, lookup_array, [match_type])
参数 lookup_value (必需), lookup_array (必需), match_type (可选)
返回值 匹配在 lookup_array 中的位置

此表概述了 MATCH 函数的组成部分。match_type 参数控制 MATCH 是查找精确匹配还是近似匹配。

精确匹配 (0)

将 match_type 设置为 0 会强制进行精确匹配。这是 MATCH 最常见的用法,其工作方式类似于 VLOOKUP 的精确匹配。

A B
Apple
Banana
Cherry
Date
=MATCH("Banana",A1:A4,0)

此表演示了在水果列表中搜索“Banana”的精确匹配。结果将是 2,因为 Banana 是该区域中的第二个项目。

精确匹配示例
=MATCH("Cherry",A1:A4,0)  // Returns 3
=MATCH("Grape",A1:A4,0)   // Returns #N/A (not found)
=MATCH("banana",A1:A4,0)   // Returns #N/A (case-sensitive)

精确匹配需要值完全相同(文本区分大小写)。如果值可能不存在于查找区域中,请使用 IFERROR 来处理 #N/A 错误。

近似匹配 (1)

Match_type 1 查找小于或等于查找值的最大值。查找区域必须按升序排序。

A B
10
20
30
40
=MATCH(25,A1:A4,1)

此表显示了在排序列表中对 25 进行近似匹配。结果是 2,因为 20 是 ≤ 25 的最大值。

近似匹配示例
=MATCH(35,A1:A4,1)  // Returns 3 (30 ≤ 35)
=MATCH(5,A1:A4,1)   // Returns #N/A (below first value)
=MATCH(100,A1:A4,1) // Returns 4 (40 ≤ 100)

近似匹配对于成绩等级、税率等级和其他基于范围的查找很有用。为获得正确结果,请务必按升序排序数据。

反向近似匹配 (-1)

Match_type -1 查找大于或等于查找值的最小值。查找区域必须按降序排序。

A B
40
30
20
10
=MATCH(25,A1:A4,-1)

此表显示了在降序列表中对 25 进行反向近似匹配。结果是 3,因为 20 是 ≥ 25 的最小值。

反向近似匹配示例
=MATCH(35,A1:A4,-1)  // Returns 2 (30 ≥ 35)
=MATCH(5,A1:A4,-1)   // Returns 4 (10 ≥ 5)
=MATCH(100,A1:A4,-1) // Returns #N/A (above first value)

反向匹配不太常见,但在某些金融计算和反向排序的数据集中有用。请记住,其排序要求与 match_type 1 不同。

MATCH 与通配符

在精确匹配 (0) 中,MATCH 支持通配符 (*, ?, ~) 进行部分文本匹配。这使得文本搜索更加灵活。

A B
Apple
Banana
Cherry
Date
=MATCH("B*",A1:A4,0)

此表演示了以“B”开头的文本的通配符搜索。结果是 2(Banana)。通配符仅适用于文本值。

通配符匹配示例
=MATCH("*rry",A1:A4,0)  // Returns 3 (Cherry)
=MATCH("?ate",A1:A4,0)  // Returns 4 (Date)
=MATCH("~*",A1:A4,0)    // Searches for literal *

星号 (*) 匹配任何字符序列,问号 (?) 匹配任何单个字符。使用波浪号 (~) 来转义通配符。

INDEX-MATCH 组合

MATCH 通常与 INDEX 配对使用,以创建比 VLOOKUP 更灵活的查找。这种组合可以向左查找并处理动态列引用。

A B C
Apple Red
Banana Yellow
Cherry Red
=INDEX(B1:B3,MATCH("Banana",A1:A3,0))

此表显示 INDEX-MATCH 查找“Banana”的颜色。MATCH 定位行(2),INDEX 返回 B 列(“Yellow”)中的相应颜色。

INDEX-MATCH 示例
=INDEX(B1:B10,MATCH(D1,A1:A10,0))  // Basic lookup
=INDEX(A1:Z100,MATCH(D1,A1:A100,0),MATCH(E1,A1:Z1,0)) // 2-way lookup
=INDEX(B1:B10,MATCH(1,(A1:A10=D1)*(C1:C10=D2),0)) // Multi-criteria

INDEX-MATCHVLOOKUP 更灵活,因为它可以在工作表的左侧、右侧或任何位置查找。最后一个示例显示了多条件数组公式语法(在旧版 Excel 中按 Ctrl+Shift+Enter 输入)。

MATCH 与动态范围

MATCH 与动态命名范围和表格配合得很好。此示例使用 MATCH 查找列中的最后一个非空单元格。

A B
Data1
Data2
Data3
=MATCH(REPT("z",255),A:A)

此表演示了在 A 列中查找最后一个文本条目。该公式返回 3,即“Data3”的位置。REPT 创建了一个保证比任何实际数据“更大”的文本值。

动态范围示例
=MATCH(9.9E+307,A:A)  // Last number in column
=MATCH(2,1/(A1:A100<>"")) // Last non-empty (array formula)
=MATCH(TRUE,INDEX(ISBLANK(A:A),0),0)-1 // Last non-blank

这些技术有助于创建动态范围,这些范围会随着数据的更改而自动调整。第二个示例是一个数组公式,无论数据类型如何,它都能找到最后一个非空单元格。

常见错误及解决方案

MATCH 可能由于多种原因返回错误。此表解释了常见问题及其解决方案。

错误 原因 解决方案
#N/A 未找到值 使用 IFERROR 或检查数据
#VALUE! 无效的 match_type 使用 0、1 或 -1
结果不正确 数据未排序 为近似匹配排序
使用通配符时 #N/A 查找区域中的数字 将数字转换为文本

此故障排除表有助于诊断 MATCH 函数问题。大多数问题源于未排序的数据、不正确的匹配类型或查找值与查找区域之间的类型不匹配。

MATCH 与其他查找函数的对比

与其他查找函数相比,MATCH 具有独特的优势。此表比较了它们的特性。

函数 返回值 灵活性 最佳用途
MATCH 位置 高(可与 INDEX 配合使用) 动态列引用
VLOOKUP 中等 简单的垂直查找
HLOOKUP 中等 水平查找
XLOOKUP 现代 Excel 版本

此比较显示了 MATCH 作为位置查找函数的独特地位。虽然像 XLOOKUP 这样的新函数提供了类似的灵活性,但 MATCH 在复杂场景和与旧版 Excel 的兼容性方面仍然至关重要。

MATCH 函数是 Excel 中查找数据位置的通用工具。无论单独使用还是与 INDEX 结合使用,它都能实现强大、动态的查找。掌握 MATCH 可以开启超越基本查找函数的高级数据分析的可能性。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教学编程方面拥有十多年的经验。

列出 所有 Excel 教程