LOOKUP函数在职场中被称为查找神器,并且有九种用法:LOOKUP的九种用法。但是如果不知道其查找原理很难做到灵活运用到工作当中,今天我就带领大家深入理解LOOKUP函数的查找原理。
一、 LOOKUP函数基本知识
语法:
LOOKUP(查找值,查找区域,结果区域)
示例:=LOOKUP("刘备",A2:A7,B2:B7)
这里讲的是LOOKUP最初级的用法原理
要点:
1、“查找区域”中的值必须按升序排列:..., -2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE;否则,LOOKUP 可能无法返回正确的值。 文本不区分大小写。
注意LOOKUP的高级用法也就是=LOOKUP(1,0/(条件1)*(条件2),查找的数组或区域)已经避免了是否升序的弊端。
2、 如果 LOOKUP 函数找不到“查找值”,则该函数会与“查找区域”中小于或等于“查找值”的最大值进行匹配(注:在满足要点1“数据升序排列”的前提下)。
3、 Excel帮助文件上要求:“查找区域”与“结果区域”大小必须相同,实际上可以不必相同。
LOOKUP第三参数如果为一个单元格(比如输入B2或B2:B2),则取值范围默认为横向,等同于B2:H2、B2:M2等。
如果第三参数是包含二个单元格以上的纵向单元格区域,则单元格范围大小不影响公式的计算。比如下面的公式是等效的
=LOOKUP("刘备",A2:A7,B2:B3)
=LOOKUP("刘备",A2:A7,B2:B7)
=LOOKUP("刘备",A2:A7,B2:B65535)
有点类似于SUMIF第三参数(SUMIF第三参数真正起作用的是第三参数单元格区域左上角那个单元格,起到坐标定位的作用。
二、LOOKUP函数的查找原理
查找原理和要点可总结为四条:
1、LOOKUP函数要求“查找区域”中的值必须按升序排列。如果“查找区域”没有按升序排列,Lookup函数也会很傻很天真地认为你是个按规则办事的人,你已将数据按升序排列。
注意:这一点对理解LOOKUP函数的查找逻辑非常重要。
2、由于“查找区域”已按要求按升序排列,为了提高查找效率,LOOKUP都是按二分法查找。
二分法在我们高中数学学函数单调的时候有涉及过,在数学中也是一个很好的结题方法。
具体的查找方式:
假设要查找的值为X,将X与已升序排列的“查找区域”最中间位置的那个数(我们称之为“位中值”)进行比较:
若X等于或大于“位中值”,由于已按升序排列,前半段的数肯定比位中值更小,所以就在“查找区域”的后半段中,继续按二分法进行查找。
若X小于“位中值”,由于已按升序排列,后半段的数肯定比位中值更大,所以就在“查找区域”的前半段中,继续按二分法进行查找。
确定中间位置的计算方式:个数为奇数时取最中间那个,为偶然个时并列最中间的那两个数的左边那个。
3、 如果 LOOKUP 找不到与“查找值”相等的数,它会使用“查找区域”中小于或等于 “查找值”的最大值。
要注意的是:“查找区域”乱序的时候,并不一定会返回小于或等于的最大值,而是一直按二分法进行查找,直到查找到相等的数或查找完“按规则应该查找的位置”(不是查找完所有的值),如果还找不到相等的数,就返回结束查找前最近一个符合条件的值。如果有多个符合条件,则返回最后一个符合条件的值。
4、LOOKUP在查找区域中的遇到空值和错误值时,会忽略空值和错误值,继续在后半段进行二分法查找。
为了更好地模拟下面这个原理图,我在网上看到一个大神做了一个二分法的模拟器,要文件的私聊。
下面举一个很简单的列子来介绍,LOOKUP是如何用二分法查找的
参考链接:
LOOKUP函数-Office支持
二分法算法的实现