Table of contents
本教程介绍了新的Excel XMATCH函数,并展示了它在解决一些常见任务方面比MATCH更好。
在Excel 365中,添加了XMATCH函数来取代MATCH函数。 但在你开始升级你现有的公式之前,最好先了解新函数的所有优点以及它与旧函数的区别。
总之,XMATCH函数与MATCH相同,但更加灵活和强大。 它可以在垂直和水平数组中查找,从第一到最后或从最后到第一的搜索,找到精确、近似和部分匹配,并使用更快的二进制搜索算法。
Excel XMATCH函数
Excel中的XMATCH函数返回一个数值在数组或单元格区域中的相对位置。
它的语法如下。
XMATCH(lookup_value, lookup_array, [match_mode], [search_mode])在哪里?
查询_价值 (required) - 要寻找的值。
查找_数组 (required) - 要搜索的单元格阵列或范围。
匹配_mode (可选) - 指定要使用的匹配类型。
- 0或省略(默认) - 完全匹配
- -1 - 完全匹配或下一个最小的值
- 1 - 完全匹配或次大值
- 2 - 通配符匹配(*,?)
搜索_mode (可选) - 指定搜索方向和算法。
- 1或省略(默认)--从头到尾搜索。
- -1 - 按从后到前的反向顺序搜索。
- 2 - 二进制搜索升序。 要求 lookup_array 以升序方式排序。
- -2 - 二进制搜索降级。 要求 lookup_array 要按降序排序。
二进制搜索是一种更快的算法,在排序的数组上有效地工作。 更多信息,请参见搜索模式。
哪个Excel版本有XMATCH?
XMATCH功能仅在Excel for Microsoft 365和Excel 2021中可用。 在Excel 2019、Excel 2016和早期版本中,不支持此功能。
Excel中的基本XMATCH公式
为了对该函数的功能有一个大致的了解,让我们建立一个最简单的XMATCH公式,只定义前两个必要的参数,而将可选的参数保留为默认值。
假设你有一个按大小排列的海洋列表(C2:C6),你希望找到某个海洋的排名。 要做到这一点,只需使用该海洋的名称,例如 印度 ,作为查询值,整个名字列表作为查询数组。
=XMATCH("印度", C2:C6)
为了使公式更加灵活,在某个单元格中输入感兴趣的海洋,例如F1。
=xmatch(f1, c2:c6)
结果,你得到一个XMATCH公式,在一个 垂直阵列 输出是查找值在数组中的相对位置,在我们的例子中,它对应于海洋的等级。
一个类似的公式完全适用于 水平阵列 你所需要做的就是调整 lookup_array 参考资料。
=xmatch(b5, b1:f1)
Excel XMATCH函数--需要记住的事情
为了在你的工作表中有效地使用XMATCH并防止出现意外结果,请记住这3个简单的事实。
- 如果在查找数组中有两个或更多的查找值出现,则在查找数组的 第一场比赛 将被返回,如果 搜索_mode 参数被设置为1或省略。 与 搜索_mode 设置为-1,则该函数以相反的顺序搜索,并返回以下位置 最后一场比赛 正如本例中所展示的那样。
- 如果查询值 没有找到 ,发生#N/A错误。
- XMATCH函数是 不区分大小写 为了区分小写和大写的字符,请使用这个大小写敏感的XMATCH公式。
如何在Excel中使用XMATCH--公式示例
下面的例子将帮助你进一步了解XMATCH函数和它的实际用途。
精确匹配与近似匹配
XMATCH的匹配行为是由可选的 Match_mode 争论。
- 0或省略(默认)--公式只搜索完全匹配。 如果没有找到完全匹配,将返回#N/A错误。
- -1 - 该公式首先搜索完全匹配,然后搜索下一个较小的项目。
- 1 - 该公式首先搜索完全匹配,然后搜索下一个较大的项目。
现在,让我们看看不同的匹配模式如何影响公式的结果。 假设你想找出某个区域,例如80,000,000平方公里,在所有海洋中的位置。
完全匹配
如果你用0来表示 Match_mode ,你会得到一个#N/A的错误,因为公式不能找到一个与查询值完全相等的值。
=xmatch(80000000, c2:c6, 0)
下一个最小的项目
如果你用-1表示 Match_mode ,该公式将返回3,因为比查询值小的最接近的匹配是70,560,000,而且它是查询数组中的第三项。
=xmatch(80000000, c2:c6, -1)
下一个最大的项目
如果你用1表示 Match_mode ,该公式将输出2,因为比查询值大的最接近的匹配是85,133,000,这是查询数组中的第二项。
=xmatch(80000000, c2:c6, -1)
下面的图片显示了所有的结果。
如何在Excel中用通配符匹配部分文本
XMATCH函数对通配符有一个特殊的匹配模式:。 Match_mode 参数设置为2。
在通配符匹配模式下,XMATCH公式接受以下通配符。
- 问号(?)来匹配任何单一字符。
- 星号(*)用于匹配任何序列的字符。
请记住,通配符只适用于文本,而不是数字。
例如,要找到第一个以 "南 "开头的项目的位置,公式是:。
=XMATCH("南*", B2:B6, 2)
或者你可以在某个单元格中输入通配符表达式,比如说F1,然后提供单元格的参考,以获得 查找_值 争论。
=xmatch(f1, b2:b6, 2)
在大多数Excel函数中,你会使用tilde(~)将星号(~*)或问号(~?)视为字面字符,而不是通配符。 在XMATCH中,不需要tilde。 如果你没有定义通配符匹配模式,XMATCH会认为? 和*是常规字符。
例如,下面的公式将精确搜索A2:A7范围内的星号字符。
=xmatch("*", a2:a7)
XMATCH反向搜索,找到最后一个匹配项
如果在查找数组中有多个查找值出现,有时你可能需要获得这些查找值的位置。 最后发生的 .
搜索的方向由XMATCH的第四个参数控制,该参数名为 搜索_mode 以相反的顺序搜索,即在垂直阵列中从下到上,在水平阵列中从右到左。 搜索_mode 应该被设置为-1。
在这个例子中,我们将返回一个特定查询值的最后一条记录的位置(请看下面的截图)。 为此,设置的参数如下。
- 查询_价值 - H1中的目标销售人员
- 查找_数组 - C2:C10中的销售人员姓名
- 匹配_mode 为0或省略(完全匹配)。
- 搜索_mode 是-1(从后到前)。
把这四个论点放在一起,我们得到这个公式。
=xmatch(h1, c2:c10, 0, -1)
它返回劳拉最后一次销售的号码。
如何在Excel中比较两列的匹配度
要比较两个列表的匹配情况,可以将XMATCH函数与IF和ISNA一起使用。
如果( isna( xmatch( 目标列表 , 搜索_列表 , 0)), "不匹配", "匹配")例如,要比较B2:B10中的列表2和A2:A10中的列表1,公式采用以下形式。
=IF(ISNA(XMATCH(B2:B10, A2:A9)), "", "在列表1中匹配")
在这个例子中,我们只识别匹配,因此 value_if_true IF函数的参数是一个空字符串("")。
在最上面的单元格(本例中为C2)中输入上述公式,按回车键,它将自动 "溢出 "到其他单元格(这被称为溢出范围)。
这个公式如何运作
在公式的核心部分,XMATCH函数在列表1中搜索列表2中的一个值,如果找到一个值,则返回其相对位置,否则会出现#N/A错误。 在我们的例子中,XMATCH的结果是以下数组。
{#n/a;#n/a;2;#n/a;4;#n/a;#n/a;8;#n/a}。
这个数组被 "喂 "给ISNA函数,以检查是否有#N/A错误。 对于每个#N/A错误,ISNA返回TRUE;对于任何其他值--FALSE。 结果,它产生以下逻辑值数组,其中TRUE代表非匹配,FALSE代表匹配。
{true;true;false;true;false;true;false;true}。
上述数组进入IF函数的逻辑测试。 根据你对最后两个参数的配置,该公式将输出相应的文本。 在我们的例子中,对于非匹配项,它是一个空字符串("")。 value_if_true )和 "列表1中的匹配 "的匹配 ( value_if_false ).
注意:此公式仅适用于支持动态数组的Excel 365和Excel 2021。 如果你使用的是Excel 2019、Excel 2016或更早版本,请查看其他解决方案:如何在Excel中比较两列。
Excel中的索引XMATCH
XMATCH可以与INDEX函数结合使用,从与查找值相关的另一列中检索出一个值,就像INDEX MATCH公式一样。 通用方法如下。
INDEX ( 返回 _ 阵列 , XMATCH ( 查找_值 , lookup_array )逻辑非常直截了当,易于理解。
XMATCH函数计算查找值在查找阵列中的相对位置,并将其传递给 行数_num 基于行号,INDEX函数从你指定的任何列中返回一个值。
例如,要查询E1中海洋的面积,可以使用这个公式。
=index(b2:b6, xmatch(e1, a2:a6))
INDEX XMATCH XMATCH进行二维查找
要同时查询列和行,请将INDEX与两个XMATCH函数一起使用。 第一个XMATCH将获得行号,第二个将检索列号。
INDEX ( 数据 , XMATCH ( 查找_值 , 纵向 _ lookup_array ),XMATCH ( 查询值 , 横向 _ lookup_array ))该公式与INDEX MATCH MATCH相似,只是你可以省略掉 Match_mode 参数,因为它默认为完全匹配。
例如,要检索特定月份(G2)的某一商品(G1)的销售数量,公式为:。
=index(b2:d8, xmatch(g1, a2:a8), xmatch(g2, b1:d1))
其中B2:D8是不包括行和列标题的数据单元,A2:A8是项目列表,B1:D1是月份名称。
区分大小写的XMATCH公式
如前所述,Excel的XMATCH函数在设计上是不区分大小写的。 要强制它区分文本大小写,请将XMATCH与EXACT函数结合使用。
匹配(true, exact( lookup_array , 查找_值 ))要搜索在 倒序 从最后一个到第一个。
匹配(true, exact( lookup_array , 查找_值 ), 0, -1)下面的例子显示了这个通用公式的作用。 假设你有一个B2:B11的大小写产品ID的列表,你想在E1中找到项目的相对位置。 E2中的大小写公式就是这样简单。
=xmatch(true, exact(b2:b11, e1))
这个公式如何运作。
EXACT函数将查询值与查询数组中的每一项进行比较。 如果比较的值完全相等,包括字符大小写,函数返回TRUE,否则返回FALSE。 这个逻辑值数组(TRUE代表完全匹配)将进入 lookup_array 由于查询值为 "true",XMATCH函数返回第一个找到的完全匹配的位置或最后一个完全匹配的位置,这取决于你如何配置XMATCH。 搜索_mode 争论。
XMATCH与Excel中的MATCH对比
XMATCH是作为MATCH的一个更强大、更通用的替代品而设计的,因此这两个功能有很多共同之处。 然而,也有本质的区别。
不同的默认行为
MATCH函数默认为完全匹配或下一个最小的项目( 匹配类型 设置为1或省略)。
XMATCH函数默认为精确匹配 ( Match_mode 设置为0或省略)。
近似匹配的不同行为
当 Match_mode / 匹配类型 参数被设置为1。
- MATCH搜索完全匹配或下一个最小的。 要求查找阵列应按升序排序。
- XMATCH搜索完全匹配或下一个最大。 不需要任何排序。
当 Match_mode / 匹配类型 参数被设置为-1。
- MATCH搜索完全匹配或下一个最大的。 需要按降序对查找阵列进行排序。
- XMATCH搜索完全匹配或下一个最小值。 不需要任何排序。
通配符搜索
要用XMATCH查找部分匹配,你需要设置 Match_mode 参数为2。
MATCH函数没有特殊的通配符匹配模式选项。 在大多数情况下,你会把它配置为精确匹配 ( 匹配类型 设置为0),这也适用于通配符搜索。
搜索模式
与新的XLOOKUP函数一样,XMATCH有一个特殊的 搜索_mode 参数,允许你定义 搜索方向 :
- 1或省略(默认)--从头到尾搜索。
- -1 - 反向搜索从后到前。
并选择一个 二进制搜索算法 ,这是很快速和有效的,在 排序的数据 .
- 2--对数据进行升序排序的二进制搜索。
- -2 - 在数据上进行二进制搜索,排序为降序。
二进制搜索 ,也叫 半区间搜索 或 对数搜索 二进制搜索是一种特殊的算法,它通过与数组中的中间元素进行比较来找到一个查找值在数组中的位置。 二进制搜索比普通搜索快得多,但只在排序过的列表上正确工作。 在未排序的数据上,它可能会返回错误的结果,这些结果乍看之下可能相当正常。
MATCH的语法中根本没有提供搜索模式参数。
XMATCH原生处理数组
与它的前辈不同,XMATCH函数是为动态Excel设计的,可以原生处理数组,而不需要你按下Ctrl + Shift + Enter . 这使得公式的建立和编辑变得更加容易,特别是在一起使用几个不同的函数时。 只要比较一下下面的解决方案。
- 区分大小写的公式:XMATCH
- 比较两列或列表是否匹配:XMATCH
XMATCH和MATCH的可用性
XMATCH是一个新功能,它只在Excel for Microsoft 365和Excel 2021中可用。
MATCH函数在Excel 365到Excel 2007的任何版本中都可用。
这就是如何在Excel中使用XMATCH函数。 感谢你的阅读,希望下周能在我们的博客上见到你
供下载的实践工作手册
Excel XMATCH公式示例(.xlsx文件)。