大多数人在第一次接触到精确匹配和大致匹配(模糊匹配)的时候,通常都是学习使用vlookup函数的时候,在老师讲解第四个参数的时候会提出这个概念:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(1)

但是并没有详细的解释什么是精确匹配,什么是大致匹配。

可能会提到大致匹配是二分法之类的概念,然后就没有下文了,于是我们就一直懵懵懂懂的用着精确匹配,偶尔用一下大致匹配也是生搬硬套。

小编也是用了若干年之后才明白这其中的奥秘,今天就和大家聊聊什么是精确匹配,什么又是大致匹配。

匹配与大致匹配

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(2)

上图就是一个标准的vlookup用法,使用的是精确匹配,很好理解,工号完全一致的前提下,得到对应的姓名。

再来复习一下vlookup的用法:

=vlookup(查找值,数据区域,要找的内容在第几列,精确匹配)

查找值(工号)在数据区域(A列)完全一样的时候,会得到需要的结果(姓名)。

如果工号有一点不同,就会得到错误值:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(3)

不小心将NE293输入为NE292,因为数据区域没有这个工号,姓名就会显示为错误值。

可能有朋友就想了,NE293和NE292看起来差不多,那么用大致匹配是不是能找到呢?

我们可以来试试:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(4)

将第四参数改为1,变成大致匹配。

(注意,有些版本的Excel在vlookup函数的说明中有误,实际上0或者false对应精确匹配,1或者是true对应大致匹配。)

公式变成大致匹配以后,只有第一个工号的姓名是正确的,原本没有对应工号的(NED182)也有姓名了,但是并不是NED183对应的姓名,不知道从哪里找了个名字填进来了,糟糕的是原本有对应工号的姓名全部得到了错误的姓名。

至此,我们彻底不理解大致匹配了……

要想了解大致匹配究竟是什么意思,还要从数据匹配的两种计算原理说起,那就是历遍法与二分法。

历遍法原理与精确匹配

历遍法大致上是这个意思:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(5)

第一个要找的工号NED034,要找的范围是A列,vlookup就从A1开始找,只找了两个单元格就发现目标,于是返回需要的姓名。

找到以后开始找第二个工号NED293,过程如图:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(6)

还是从A1开始来一遍,找了6个单元格发现目标,返回需要的姓名。

继续找第三个工号NED266,这次就找了12个单元格才发现目标,然后继续找第四个工号……………………

是不是觉得vlookup挺辛苦的!

这种查找方法就是历遍法,说通俗点就是挨个过一遍,找到目标就停止,找不到就一直找。

这也是为什么在用vlookup的时候,不建议选择整列的原因,如果有一个数据是没有的,例如刚才的NED292,如果选择整列,也就是1048576这么多行,就要挨个找一遍才能确定没有,得到一个错误值,如果数据里有两个是不存在的,就得再来一次1048576这么多行,vlookup就是这样累死的……

精确查找使用的就是历遍法原理,这种方法的优势是没有什么限制,缺陷也很明显,在某些时候运算速度会比较慢。

为了解决运算速度的问题,就有了二分法原理和所谓的大致匹配。

二分法原理与大致匹配

二分法可不像历遍法这么好理解,网络上也有各种版本的介绍,不过对于新手来说都显得过于专业,没办法,这个概念真的很抽象。

小编通过以下简单的测试,让大家对二分法原理有个比较直观的了解,有兴趣的朋友可以自己跟着操作试试。

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(7)

注意公式中的第四参数是1,也就是大致匹配,大致匹配使用的二分法原理。

什么是二分法?

不同于历遍法,二分法不是从开头找起,而是从中间位置的数据找起。

比如这里有三个数,2、4、6,要找的内容是2,如果使用精确查找也就是历遍法,第一次就能找到。但是用二分法的时候,是先从中间的位置也就是4找起,如果不是要找的内容,就要比较,当要找的数据小于中间位置的数据时,向上找,反之则向下找。

此处2小于4,所以向上找,就发现了目标,因此得到了正确结果。

这样解释了以后,是不是感觉二分法也不是那么难的?

是不是难咱们接下来再看:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(8)

这次要找的数据变成5,结果是4,怎么解释?

如果是历遍法查找的话,找三次,找不到,结果返回错误值。

但是二分法不这样,依然和中间位置的4比较,5大于4,向下找,下边的是6,5小于6,只能得到6上面的数据就是4。

可能有朋友会问,为什么和6比较以后不继续比了,这就是二分法的特性,因为一共三个数字,第一次比较就排除一半,只剩一个数字了(就是6),第二次比较之后没得比了,只能得到4。

如果还有些迷糊的话,再看一个例子:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(9)

这次要找的数据变成7,还是和前面一样,先与4比,7大于4,向下继续和6比,此时有三种结果,如果相等,结果为6;

如果要找的内容小于6,得到6上面的数据(刚才找5就是这个情况);

如果要找的内容大于6,结果还是6,因为下面没有数据了,只能得到6,本例就是这个情况。

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(10)

经过多次测试,我们还可以发现一个现象,要找的值只要比6大,始终得到的都是6。

(这个结论很重要,以后学习lookup经典套路的时候就会用到了)

那么是不是说二分法就一定可以得到一个结果,而不会得到错误值呢?

肯定不是这样的,比如这种情况:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(11)

要找1,为什么得到错误值?

我们已经明白了二分法的基本模式,可以试试来分析:第一次和4比较,1小于4,向上找,1还小于2,继续向上,但是向上就没有单元格了,注意不是没有数据而是没有单元格,刚才向下的时候,6下面也是没有数据,但是还是有单元格的,也即是说,有单元格代表在一个合理的位置,没有单元格说明连位置都不存在,肯定是错误值了。

再深一步想,只要找的值小于2,肯定都是错误值,咱们不妨来试试:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(12)

结果正如我们所料。

此时其实一个更加重要的结论呼之欲出了,那就是说,只要找的值在2和4之间,肯定得到2,在4和6之间,肯定得到4,大于6的肯定得到6,这就是vlookup区间查找的原理啊,朋友们!

什么,你还不知道vlookup的区间查找是什么意思,来看这样一个实例:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(13)

根据销售额找到对应的提成比例,这里就用的是vlookup大致匹配,仔细看一下,只有三个参数,省略了第四个参数(连同逗号一起省略)代表大致匹配,如果保留逗号只是省略参数代表精确匹配。

好了,大致匹配和二分法你觉得是不是明白了一些。

其实这才是二分法的一部分,更重要的内容是,【二分法默认数据为升序排列】!

尾声!

什么叫默认数据为升序排列,还是通过例子来理解吧。

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(14)

刚才我们讲解二分法使用的数据源就是升序排列,如果顺序是乱的,那么一切都变了!

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(15)

找6,没有得到6却得到了4,何解?

第一次6和2比较,这一点没有疑问吧,6大于2,向下找,继续和4比较,6还大于4,只能得到4了,下面没有数据了。

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(16)

找1得到错误值,还是一样的道理,先和2比较,向上,继续和6比较,没有位置了(不是没有数据哦),只能得到错误值。

可见,二分法不会起考虑数据源实际上的排列顺序,始终遵循找到中间位置,比较大小,大了向下找,小了向上找的原则去寻找目标。

其实到这里,二分法基本上说清楚了,再来最后一个例子:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(17)

在这样的7个数里找5,结果是几?

二分法说:先和8比,5小于8,向上找,上边有三个数据,和中间的2比较,5大于2,再向下找,只有一个数字4因此结果应该是4。

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(18)

从查找次数的角度,二分法只找两次就完成任务,因为二分法不是以内容为查找对象,而是通过不断地二分数据源,每次排除一半数据,到最后一次二分时完成任务,本例中一共7个数,2的3次方是8,也就是说,当数据量达到8个的时候,才会找三次,同理,当数据量达到16个的时候,才会找四次,以此类推。

这里说的次数是理论上的最大次数,如果很凑巧,一次就找到了,那么当然结束工作,例如:

excel中vlookup函数的模糊匹配(vlookup函数中的精确匹配和大致匹配究竟是什么意思)(19)

要找的数据正好就在中间,一次就完成。

二分法的原理讲到这里就接近尾声了,我们明白了为什么二分法查找速度快,也明白了为什么有时候明明有数据却得不到正确的结果。

对于原理这样理论性很强的知识点,通过自己动手模拟的效果应该算是不错的,那么留给大家一个作业吧,可能有些朋友注意到了,我们举的例子中,数据源都是单数,要么3个,要么7个,这样的数据源中间位置是很好找的,如果数据源是4个或者是6个,中间位置该如何确定呢?

给你个方法自己去测试吧,比如有6个数据,那么中间位置只能有两种可能,3或者4,具体是哪个,自己去试试就明白了……

最后一个问题,全文都是用数字比较大小的,如果是字母或者文字,或者不是一个字的那种情况怎么比较大小?

回复:请注意,用数字做解释是为了让我们更容易理解,实际上对于Excel来说,对于各种内容的大小是有自己的原则的,再通俗点说,一列数据排序后的结果,就是大小的判定规则,我们只需要理解原理就行了,并不需要每次都自己去判定大小关系。

,