强大的查找定位函数match的用法
今天说一个查找定位函数match的用法,它是按特定的顺序搜索特定的项,然后返回该项在此区域或数组中的相对位置,经常与其他查找引用函数结合使用,比如index,vlookup,offset等。
-01-
函数说明
它的函数结构如下图所示,可以看到一共有3个参数。
lookup_value 必需。要在lookup_array中匹配的值。可以为值(数字、文本或逻辑值)或对数字、文本或逻辑值的单元格引用。
lookup_array 必需。要搜索的单元格区域或数组。此参数单元格区域必须为一行或者一列,数组的话必须为一维数组,否则返回错误值。
match_type 可选。数字 -1、0 或 1。match_type 参数指定Excel如何将 lookup_value 与 lookup_array 中的值匹配。此参数的默认值为 1。也就是查找匹配的方式。
下面是第3参数的不同查找方式:
1或省略 MATCH 查找小于或等于 lookup_value 的最大值。lookup_array 参数中的值必须以升序排序。
0 MATCH 查找完全等于 lookup_value 的第一个值。lookup_array 参数中的值可按任何顺序排列。
-1 MATCH 查找大于或等于 lookup_value 的最小值。lookup_array 参数中的值必须按降序排列。
MATCH返回匹配值在lookup_array中的位置而非其值本身。例如,MATCH("b",{"a","b","c"},0)返回2,即“b”在数组 {"a","b","c"} 中的相对位置。而且当第3参数为0,即精确查找时,第一参数支持通配符。
-02-
示例解释
在C1单元格中输入如下公式,结果返回3。意思是在A1:A7这个区域中查找5,找到后返回5在这个区域中的相对位置,也就是3。发现有2个5,但只返回第一个5的位置。第3参数为0,是精确查找。如果在这个区域中没有5,会返回错误值,如下第2图所示。
在C1单元格中输入如下公式,结果返回3。此时第3参数为1,是模糊查找,查找区域必须为升序排列。在A1:A7这个区域中查找5,找不到,就找比它小的最大值4,返回4在这个区域中的位置也就是3。
在C1单元格中输入如下公式,结果返回6。此时第3参数为-1,是模糊查找,查找区域必须为降序排列。在A1:A7这个区域中查找9,找不到,就找比它大的最小值10,返回10在这个区域中的位置也就是6。
-03-
具体应用
1.计算不重复的个数
在A列中有一些字母,求不重复的有几个。公式为C8=SUM(--(MATCH(A8:A15,A8:A15,)=ROW(A8:A15)-7))。这里是match的数组用法。MATCH(A8:A15,A8:A15,)这部分是查找A8:A15中每一个单元格在A8:A15这个区域中的位置,形成一个数组。与ROW(A8:A15)-7这个数组进行比较,相等的就是第一次出现的,也就是不重复的值。最后将其求和。
2.将不重复的值提取出来
还是上面那个题目,现在要求将不重复的值一一提取出来。这里方法有2种,公式都比较长。第一个公式为D8=IFERROR(INDEX(A:A,SMALL(IF(MATCH(A$8:A$15,A$8:A$15,)=ROW(A$8:A$15)-7,ROW(A$8:A$15)),ROW(A1))),"")。第1个题目,我们已经将不重复的值进行比较了,如果相等就是不重复的。现在如果相等就让它返回它的行号,然后用small这个函数从小到大提取不重复值第一次出现的行号,最后用index返回不重复的值。iferror用来规避错误值。
第二个公式为E8=IFERROR(INDEX(A:A,SMALL(IF(COUNTIF(OFFSET(A$8,,,ROW($1:$8)),A$8:A$15)=1,ROW(A$8:A$15)),ROW(A1))),"")。这个公式比较复杂,用到了offset的多维引用,也是为了返回不重复值第一次出现的行号,后面一样是用small和index。最开始是想要用公式=COUNTIF(A$8:A8,A8)来确定每个单元格的值是第几次出现的,所有第一次出现的就是不重复的值。后来发现这个公式用数组不好实现,就想到用offset试一下,结果用offset要用到多维引用,而且还实现了。当然也归功于countif,它能对多维引用进行降维计算。
好了,今天虽说讲了match这个函数的基本用法,但是举得例子比较深奥,我觉得对于初学者不太合适,抱歉了。