Excel - VLOOKUP 函数的精确查找和近似查找

这里就不主要介绍 VLOOKUP 函数的使用方法了, 本文主要介绍该函数的第四个参数 - range_lookup.

因为最近有小伙伴对该问题有所疑问, 那么正好趁着这个机会整理一下这个知识点.

话不多说, VLOOKUP 函数语法如下:

VLOOKUP(lookup_value, table_array, col_index_num, [range_lookup])

本文着重讲解的是 range_lookup 参数.

该参数有两个对应值:

  • 0 或 FASLE, 对应着精确匹配方式;
  • 1 或 TRUE 或者 省略, 对应着近似匹配方式, 但是这种情况要求查询区域的首列按升序排序.

情况1: 精确匹配

匹配方式是全面查询, 如果遇到一个或者多个查询结果, 即返回第一个匹配的对应结果; 如果没有匹配到, 则直接返回错误值 #N/A.

实际操作返回的是第一个匹配的值, 如图:

mysql hive近似匹配多个字符串 vlookup 近似匹配_数据

情况2: 近似匹配

这里要求查询区域的首列按升序排序. 采取二分法的方式进行查询匹配.

二分法查找是把查找范围中的数据按照个数一分为二找到位于中间位置的一个数据,叫做中间值,

然后用我们的查找值和中间值做比较。

当中间值等于查找值时,直接去获取结果;当中间值小于查找值时,则向下继续进行二分法查找比较(也就是在不含中间值在内的下方的那一半数据中继续进行二分法查找);当中间值大于查找值时,则向上继续进行二分法查找比较(也就是在不含中间值在内的上方的那一半数据中继续进行二分法查找)。

如果如此二分到最后一个数据都未找到等于查找值的数据:最后一个数据小于查找值的,那就以最后一个数据的位置去获取结果值;最后一个数据大于查找值的,那就再向上找一个位置最靠近最后一个数据的小于或等于查找值的数据,再以这个数据的位置去获取结果。

mysql hive近似匹配多个字符串 vlookup 近似匹配_算法_02

mysql hive近似匹配多个字符串 vlookup 近似匹配_算法_03

此时没有升序排列时,公式使用错误。过程是这样的:
第一次查找:中间值(第4个数据)是7,查找值2小于7,因此向上在A2~A4中找;
第二次查找:上面的4个数据,中间值(第2个数据)是5,查找值2小于5,继续向上找,也就是A2~A3;
第三次查找:只有一个数据A2也就是4,因此以4为参考,向上找一个位置最靠近4,同时数值小于2或者等于2的数据,但是因为没有满足的数据所以显示公式错误.

匹配方法是近似查找, 就涉及到二分法查找方式. 这里给个示例, 而且返回的结果还和第二参数选取的范围有关系, 因为二分法首先要根据选取范围的第一列的长度进行不断的二分, 然后进行匹配值.

mysql hive近似匹配多个字符串 vlookup 近似匹配_excel_04

环境说明: Microsoft Office 家庭和学生版 2021.

其他版本可能会有所不同, 以自己版本为主.

参考文章:

  • Excel中Vlookup函数近似匹配和精确匹配:
  • Excel函数与公式应用大全 - 北京大学出版社