Table of contents
本教程通过公式实例解释了如何在Excel中使用MATCH函数。 它还展示了如何通过使用VLOOKUP和MATCH制作动态公式来改进你的查找公式。
在Microsoft Excel中,有许多不同的查找/参考函数可以帮助你在一系列单元格中找到某个值,MATCH就是其中之一。 基本上,它可以确定一个项目在一系列单元格中的相对位置。 然而,MATCH函数的作用远远超出其纯粹的本质。
Excel MATCH函数--语法和用途
Excel中的MATCH函数在一个单元格范围内搜索一个指定的值,并返回该值的相对位置。
MATCH函数的语法如下。
MATCH(lookup_value, lookup_array, [match_type])查询_价值 (必填) - 你想找到的值,它可以是一个数字、文本或逻辑值,也可以是一个单元格引用。
查找_数组 (required) - 要搜索的单元格范围。
匹配_类型 (可选) - 定义匹配类型。 它可以是这些值中的一个:1,0,-1。 match_type参数设置为0只返回精确匹配,而其他两种类型允许近似匹配。
- 1或省略(默认)--找到 最大值 要求对查找数组按升序排序,从最小到最大或从A到Z。
- 0 - 找到数组中的第一个值是 完全相等 不需要进行排序。
- -1 - 找到 最小值 查询数组应按降序排序,从大到小或从Z到A。
为了更好地理解MATCH函数,让我们根据这个数据做一个简单的公式:A列是学生的名字,B列是他们的考试分数,从大到小排序。 要找出一个特定的学生(比如。 劳拉 )等代表,使用这个简单的公式。
=MATCH("Laura", A2:A8, 0)
另外,你可以把查询值放在某个单元格中(本例中为E1),并在你的Excel匹配公式中引用该单元格。
=match(e1, a2:a8, 0)
正如你在上面的截图中所看到的,学生的名字是以任意的顺序输入的,因此我们设置了 匹配类型 参数为0(完全匹配),因为只有这种匹配类型不需要对查找数组中的值进行排序。 从技术上讲,匹配公式返回的是劳拉在该范围内的相对位置。 但由于分数是从大到小排序的,它也告诉我们,劳拉在所有学生中的分数是第五位。
提示:在Excel 365和Excel 2021中,你可以使用XMATCH函数,它是MATCH的一个现代和更强大的继承者。
关于MATCH函数,你应该知道的4件事
正如你刚才所看到的,在Excel中使用MATCH是很容易的。 然而,就像其他几乎所有的函数一样,你应该注意到一些特殊性。
- MATCH函数返回 相对位置 的数组中的查找值,而不是值本身。
- MATCH是 不区分大小写 也就是说,在处理文本值时,它不区分小写和大写的字符。
- 如果查找数组包含多个查找值的出现,则返回第一个查找值的位置。
- 如果在查找数组中没有找到查找值,将返回#N/A错误。
如何在Excel中使用MATCH--公式示例
现在你知道了Excel MATCH函数的基本用途,让我们再来讨论几个超越基础的公式例子。
使用通配符的部分匹配
像许多其他函数一样,MATCH能理解以下通配符。
- 问号(?) - 替换任何单一字符
- 星号(*) - 替换任何序列的字符
注意:通配符只能在匹配公式中用 匹配类型 设为0。
带通配符的匹配公式在以下情况下非常有用:你不希望匹配整个文本字符串,而只希望匹配字符串的某些字符或某些部分。 为了说明这一点,请考虑以下例子。
假设你有一份区域经销商和他们过去一个月的销售数字的列表,你想找到某个经销商在列表中的相对位置(按销售金额降序排序),但你不能准确记住他的名字,尽管你记得几个首字母。
假设经销商的名字在A2:A11范围内,而你要搜索以 "汽车 "开头的名字,公式如下。
=MATCH("car*", A2:A11,0)
为了使我们的 "匹配 "公式更具通用性,你可以在某个单元格(本例中为E1)中输入查询值,并将该单元格与通配符连接起来,像这样。
=MATCH(E1& "*", A2:A11,0)
如下面的截图所示,该公式返回2,也就是 "卡特 "的位置。
要替换查找值中的一个字符,请使用"?"通配符操作,像这样。
=MATCH("ba?er", A2:A11,0)
上述公式将匹配名称为" 贝克 ",并重新运行其相对位置,即5。
区分大小写的MATCH公式
正如本教程一开始提到的,MATCH函数不区分大写和小写字符。 要制作一个对大小写敏感的Match公式,请将MATCH与EXACT函数结合使用,EXACT函数精确比较单元格,包括字符大小写。
这里是通用的区分大小写的公式来匹配数据。
匹配(true, exact( 查找阵列 , 查询值 ), 0)该公式的工作逻辑如下。
- EXACT函数将查找值与查找数组的每个元素进行比较。 如果被比较的单元格完全相等,该函数返回TRUE,否则返回FALSE。
- 然后,MATCH函数比较TRUE(这是其 查找_值 )与EXACT返回的数组中的每个值,并返回第一个匹配的位置。
请记住,这是一个数组公式,需要按Ctrl + Shift + Enter才能正确完成。
假设你的查询值在E1单元格,查询数组是A2:A9,那么公式如下。
=match(true, exact(a2:a9,e1),0)
下面的截图显示了Excel中区分大小写的匹配公式。
比较两列的匹配和差异(ISNA MATCH)。
检查两个列表的匹配和差异是Excel中最常见的任务之一,它可以通过各种方式完成。 ISNA/MATCH公式就是其中之一。
IF(ISNA(MATCH( 列表1中的第一个值 , 列表2 , 0)), "不在名单1", "")对于列表2中不存在于列表1中的任何值,公式返回" "。 不在名单1中 "。 这里是如何。
- MATCH函数在列表2中搜索列表1中的一个值,如果找到一个值,它将返回其相对位置,否则将出现#N/A错误。
- Excel中的ISNA函数只做一件事--检查#N/A错误(意思是 "不可用")。 如果一个给定的值是#N/A错误,该函数返回TRUE,否则返回FALSE。 在我们的例子中,TRUE意味着列表1中的一个值在列表2中找不到(即MATCH返回了一个#N/A错误)。
- 因为对于你的用户来说,看到没有出现在列表1中的值为 "true "可能会非常困惑,所以你将IF函数包在ISNA周围,显示" 不在名单1中 "代替,或任何你想要的文本。
例如,要将B列中的数值与A列中的数值进行比较,公式的形状如下(其中B2是最上面的单元格)。
=IF(ISNA(MATCH(B2,A:A,0)), "不在列表1中", "" )
正如你所记得的,Excel中的MATCH函数本身是不区分大小写的。 为了让它区分字符的大小写,将EXACT函数嵌入到 lookup_array 参数,并记住按Ctrl + Shift + Enter键来完成这一工作。 阵列公式 :
=IF(ISNA(MATCH(TRUE, EXACT(A:A, B2),0)), "不在列表1中", "" )
下面的截图显示了这两个公式的运行情况。
要了解在Excel中比较两个列表的其他方法,请看以下教程:如何在Excel中比较两列。
Excel VLOOKUP和MATCH
这个例子假设你已经对Excel的VLOOKUP函数有了一些基本的了解,如果你有的话,很可能你已经遇到了它的许多限制(详细的概述可以在《为什么Excel VLOOKUP不起作用》中找到),正在寻找一个更强大的替代品。
VLOOKUP最恼人的缺点之一是,在查找表中插入或删除一个列后,它就停止工作了。 发生这种情况是因为VLOOKUP根据你指定的返回列的编号(索引号)拉出一个匹配值。 因为 索引号 在公式中 "硬编码",当表格中增加或删除新的列时,Excel无法调整它。
Excel的MATCH函数处理的是一个 相对位置 的查询值,这使得它完美地适用于 col_index_num 换句话说,你不是把返回列指定为一个静态数字,而是使用MATCH来获得该列的当前位置。
为了使事情更容易理解,让我们再次使用学生考试分数的表格(类似于我们在本教程开始时使用的表格),但这次我们将检索真实的分数,而不是其相对位置。
假设查找值在F1单元格,表格数组为$A$1:$C$2(如果你打算将公式复制到其他单元格,使用绝对单元格引用来锁定它是一个好的做法),公式如下。
=vlookup(f1, $a$1:$c$8, 3, false)
第3个参数( col_index_num )被设置为3,因为 数学分数 正如你在下面的截图中看到的,这个普通的Vlookup公式工作得很好。
但只是在你插入或删除一个(几个)列之前。
那么,为什么会出现#REF!错误? 因为 col_index_num 设置为3告诉Excel从第三列获取一个值,而现在表格数组中只有两列。
为了防止这样的事情发生,你可以通过加入以下匹配函数使你的Vlookup公式更加动态。
match(e2,a1:c1,0)
在哪里?
- E2是查询值,它是 完全相等 到返回列的名称,即你想从其中提取一个值的列( 数学分数 在这个例子中)。
- A1:C1是包含表头的查找数组。
而现在,将这个Match函数包含在 col_index_num 你的Vlookup公式的参数,像这样。
=vlookup(f1,$a$1:$c$8, match(e2,$a$1:$c$1, 0), false)
并确保无论你增加或删除多少列,它都能无懈可击地工作。
在上面的截图中,我锁定了所有的单元格引用,这样即使我的用户把它移到工作表中的另一个地方,公式也能正常工作。 在下面的截图中你可以看到,公式在删除一列后也能正常工作;此外,Excel足够聪明,在这种情况下会正确调整绝对引用。
Excel HLOOKUP和MATCH
以类似的方式,你可以使用Excel的MATCH函数来改进你的HLOOKUP公式。 一般原则与Vlookup的情况基本相同:你使用Match函数来获得返回列的相对位置,并将该数字提供给 行_index_num 参数的Hlookup公式。
假设查找值在B5单元格,表阵列为B1:H3,返回行的名称(MATCH的查找值)在A6单元格,行头为A1:A3,完整的公式如下。
=hlookup(b5, b1:h3, match(a6, a1:a3, 0), false)
正如你刚才所看到的,Hlookup/Vlookup & Match的组合肯定比普通的Hlookup和Vlookup公式要好。 然而,MATCH功能并没有消除它们的所有限制。 特别是,Vlookup Match公式仍然不能在它的左边寻找,而Hlookup Match也不能在最上面一行以外的任何一行中搜索。
为了克服上述(和其他一些)限制,可以考虑使用INDEX MATCH的组合,它为在Excel中做查找提供了一种真正强大和通用的方法,在许多方面优于Vlookup和Hlookup。 详细的指导和公式例子可以在INDEX & MATCH in Excel - 一个更好的替代VLOOKUP中找到。
这就是在Excel中使用MATCH公式的方法。 希望本教程中讨论的例子能对你的工作有所帮助。 感谢你的阅读,希望下周能在我们的博客上见到你。
供下载的实践工作手册
Excel MATCH公式实例(.xlsx文件)。