Excel MATCH函数与公式实例

  • Share This
Michael Brown

本教程通过公式实例解释了如何在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是很容易的。 然而,就像其他几乎所有的函数一样,你应该注意到一些特殊性。

    1. MATCH函数返回 相对位置 的数组中的查找值,而不是值本身。
    2. MATCH是 不区分大小写 也就是说,在处理文本值时,它不区分小写和大写的字符。
    3. 如果查找数组包含多个查找值的出现,则返回第一个查找值的位置。
    4. 如果在查找数组中没有找到查找值,将返回#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文件)。

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.