解析lookup的经典查找方式

发布时间:2011-04-02 21:11:06   来源:文档文库   
字号:

【公式解析系列】之LOOKUP(1,0/(条件),查找数组或区域)

LOOKUP函数有一个经典的条件查找解法,通用公式基本可以写为:

1. LOOKUP(2,1/(条件),查找数组或区域)     

2.

3. LOOKUP(1,0/(条件),查找数组或区域)

很多初学者对此感觉非常诧异就,主要疑惑有:
1、公式中的210等数字有什么含义,明明在查找条件与这3个数字根本毫无联系,怎么能得到正确结果?
2、明明LOOKUP函数说明需要升序查找,否则可能无法返回正确的值,上面这种解法又是如何得改变这一说法呢?
3、据说LOOKUP函数的查找顺序是二分法,并且有流程图可循,是否可以结合此例进行讲解?(这个暂不说明)


【函数帮助信息摘录】
语法:LOOKUP(lookup_value, lookup_vector, result_vector)
1[要点]  lookup_vector 中的值必须以升序排列...,-2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE。否则,LOOKUP 可能无法返回正确的值。大写文本和小写文本是等同的。
2、如果 LOOKUP 函数找不到 lookup_value,则它与 lookup_vector 中小于或等于 lookup_value 的最大值匹配。
3、如果 lookup_value 小于 lookup_vector 中的最小值,则 LOOKUP 会返回 #N/A 错误值。


【释疑】简要地说,从逻辑推理来看:
1、首先,条件是一组逻辑判断的值或逻辑运算得到的由TRUEFALSE组成或者0与非0组成的数组,因而:0/(条件)的作用是用于构建一个由0或者#DIV!0错误组成的值。
2、根据LOOKUP函数说明中的这一条:

如果 LOOKUP 函数找不到 lookup_value (即:1,则它与 lookup_vector 中小于或等于 lookup_value 的最大值(即:0匹配。

也就是说,要在一个由0#DIV!0组成的数组中查找1,肯定找不到1,因而将返回小于或等于1的最大值(也就是0)匹配

为什么要用2来查找1或用1来查找0呢?因为如果有多个与第1参数相等的值,则Lookup就不一定返回最后一个所对应的记录,所以必须养成一个良好习惯,
而不要用:LOOKUP(1,1/(条件),……,或LOOKUP(,0/(条件),……

3、如果有多个满足条件的纪录,为何只返回最后一个,而不是第一个或其他呢?这个解释就需要二分法流程图的模拟了。而对于一般使用者来说,只需要记住查找满足条件的最后一个记录可以使用通用公式

1. LOOKUP(2,1/(条件),查找数组或区域)     

2.

3. LOOKUP(1,0/(条件),查找数组或区域)

本文来源:https://www.2haoxitong.net/k/doc/9e99cd3a376baf1ffc4fad52.html

《解析lookup的经典查找方式.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式