excel表格中Match函数怎么使用? Match函数的那些小伎俩
脚本之家
match函数是excel常见的引用函数,但它与vlookup、index等引用函数不同,它不是查询某个值在另一区域中的对应数据,而是返回某个值在某个区域的位置。但也正因为match函数的这个特性,它通常与vlookup和index函数等进行组合搭配使用,能够应对日常工作中的大量数据引用场景。
下面作者将进行match函数基础语法的讲解,和“match+vlookup”及“match+index”两种最常见函数组合公式应用。
match函数语法和用法
MATCH函数的基本含义:
MATCH函数用于在指定区域内查找特定值,并返回该值在区域中的相对位置(指定范围的行序号或列序号)。它是Excel和WPS表格中实现动态定位的根基函数,常与INDEX、OFFSET等函数组合使用。
match函数的语法图如下所示:
其完整表达式为:=match(查找值,查询区域,匹配类型)
MATCH函数的公式结构也够简单:
=MATCH(查找值, 查找区域, [匹配模式])
- 查找值:要搜索的内容(文本、数值、单元格引用)
- 查找区域:单行或单列的数据范围
匹配模式(可选):
- 0:精确匹配(最常用)
- 1:升序模糊匹配(区域必须升序排列)
- -1:降序模糊匹配(区域必须降序排列)
如果第三参数省略默认为“1”:升序模糊匹配。
它包含3个参数,第1参数为查找值,第2参数为查询区域,第3参数是匹配类型。
其含义是返回查询值在特定顺序下的数组中的位置。所以从这个定义来看,它有一定的前提条件,即数据区域默认执行升序排序!这一点是我们在日常match函数应用中容易忽视的细节。
它的通俗含义则是返回查找值在列表中的位置,结果会返回一个数字。
这里我们需要了解match函数第3参数的两种匹配类型,分别为精确匹配和近似匹配,用数字来表示则为0和1.
所谓精确匹配即只查询与查找值相同的值,而近似匹配它会在列表不包含该查找值时,返回与其相近的值。
这里我们要查询日期为“2023/11/20”的最低价,如果使用vlookup函数来查询,其关键一步是要确定要返回的结果位于区域中的第几列,当数据量不大时,可以直接数出结果列的位置,但这里我们将使用match函数来快速返回要返回结果的列序号。
根据match函数的语法,我们在其第1参数查询值输入“H1”单元格地址,第2参数查询区域即要在哪个单元格区域中查询该值,输入为第1行标题行的数据单元格区域,第3参数是匹配类型,输入0则为精确匹配。
所以公式为:
=MATCH(H1,A1:E1,0)
公式得到的结果为4,即该查询值在标题行中的位置为第4个数据。
此时我们将这个match函数公式嵌套到vlookup函数中,并作为它的第3参数要返回的列号。
vlookup+match函数组合
这个函数组合是excel中应用频率非常高的引用公式,它的含义就是利用match函数确定要返回的指定列序号,然后通过vlookup函数执行数据查询。
我们直接输入公式:
=VLOOKUP(G2,A1:E245,MATCH(H1,A1:E1,0),0)
vlookup函数的表达式为:=vlookup(查找值,引用区域,返回列,匹配类型)
关于vlookup函数的具体公式应用这里不作详解,我们只要清楚match函数在其中是作为第3参数来返回一个列序号的数字,使vlookup函数在引用区域的对应列中返回要查询的数据!
index+match函数组合
当我们使用index函数来查询特定日期的指定价格,比如开盘价或最低价,则需要执行两次match函数的嵌套。
因为index函数的表达式是:=index(引用区域,行序号,列序号)
根据其语法表达,它需要返回两个为数字的参数值,既然列序号可以通过match函数得到,那么同理也可以使用match函数来计算指定值在一列中的位置。
所以我们直接输入公式:
=INDEX(A1:E245,MATCH(G10,A1:A245,0),MATCH(H9,A1:E1,0))
这个公式第1个match函数是查询指定日期在日期列中的位置,第2个match函数是查询指定价格在标题行中的位置。
职场常见办公场景1:
列标题的动态定位
比如我们想要确定以“姓名”为名称的列标题位于所选表格区域B1:D4的第几列位置(列序号)。
可以这样简单的输入函数公式:
=MATCH("姓名",B1:D1,0)
即查找文本值“姓名”在B1:D1单行中的精确匹配位置,很明显位于第2个单元格中,所以位置就是列号2。
因为在参数介绍中已经明确表明,MATCH函数的第一参数不仅可以是文本值,也可以是单元格引用:
=MATCH(C1,B1:D1,0)
所以我们可以将查找值文本值“姓名”用C1来代替。
职场常见办公场景2:
行标题的动态定位
这个案例与上一个案例(职场常见办公场景1)是类似的概念。只不过是把在行区域中查找变成了在列区域中查找罢了。
比如我们想要确定以“销量”为名称的行标题位于所选表格区域B1:B3的第几行位置(行序号)。
我们可以这样简单输入函数公式:
=MATCH("销量",B1:B3,0)
即查找文本值“销量”在B1:B3单列中的精确匹配位置,很明显位于第3个单元格中,所以位置就是行号3。
职场常见办公场景3:
多条件位置查找
比如我们想要查找月份“3月”的姓名“李四”位于所选表格区域B1:D5的第几行。
可以这行输入函数公式:
=MATCH(1,(B1:B5="3月")*(C1:C5="李四"),0)
将两个条件用乘号连接表示同时满足成立:
(B1:B5="3月")*(C1:C5="李四")
(B1:B5="3月")会返回由逻辑值TRUE和FALSE组成的数组:
{FALSE;FALSE;TRUE;TRUE;FALSE}
(C1:C5="李四")会返回由逻辑值TRUE和FALSE组成的数组:
{FALSE;TRUE;TRUE;FALSE;FALSE}
两者相乘将会转换为由0和1组成的数组:
{0;0;1;0}
数组中的元素“1”则代表两个条件同时成立时的位置。
MATCH函数用查找值“1”,在数组{0;0;1;0}中查找,返回位置“3”。
职场常见办公场景4:
反向查找最后出现的位置
比如A列中的省份名称可能包含重复的数据,我们想要查找“河北”最后出现的单元格位置在第几行。
我们可以这样输入函数公式:
=MATCH(2,1/(A:A="河北"))
省略第3参数默认为升序模糊匹配,会查找小于等于查找值最接近的值。
条件判断:
- A:A="河北"生成由逻辑值TRUE(1)和逻辑值FALSE(0)组成的数组。
数组转换:
- 1/(A:A="河北")将逻辑值TRUE转换为1,逻辑值FALSE转换为错误值#DIV/0!。
匹配逻辑:
- MATCH(2, ...)会在转换后的数组中查找最后一个1的位置,因为2大于1,且所有1均小于2。所以最后一个1所在的“河北”位置位于A列的第5个单元格。
职场常见办公场景5:
近似匹配
比如我们有一个销量区域对照表:销量小于100,没有折扣;销量大于等于100小于200,折扣为3%;销量大于等于200小于300,折扣为7%;销量大于等于300,折扣为12%。
我们可以这样输入函数公式:
=MATCH(D3,A2:A4,1)
因为MATCH函数第三参数是1,所以查找区域A2:A4销量必须升序排序。
以D3单元格的销量“215”举例,查找值“215”在A2:A4中不存在,则会返回小于等于215的最大值(销量200)所在的行为“2”。
继续加个INDEX函数:
=INDEX(B2:B4,MATCH(D3,A2:A4,1))
确定B2:B4区域内第2行第1列(与参数1重合省略)交叉位置的折扣值“7%”。
这里值得注意的是当销量小于100时,也就是没有折扣,会返回错误值:
=IFERROR(INDEX(B2:B4,MATCH(D3,A2:A4,1)),"0")
嵌套一个IFERROR函数对可能返回的错误值(0折扣)显示空值即可。
职场常见办公场景6:
逆向查询(最常见的案例)
我们想要根据“产品”从右向左查询“编码”。
可以这样输入函数公式:
=MATCH(D3,B2:B4,0)
用MATCH函数查找D3单元格“冰箱”在B2:B4区域的精准位置为2。
最后用INDEX函数外嵌:
=INDEX(A2:A4,MATCH(D3,B2:B3,0))
INDEX函数查找A2:A4区域内(编码列)第2行第1列(与编码列重合省略)的交叉位置值为“a2”。