使用LOOKUP函数实现无序查询

LOOKUP函数有一个经典的条件查找解法 , 通用公式基本可以写为:
LOOKUP(2,1/(条件),查找数组或区域)

LOOKUP(1,0/(条件),查找数组或区域)
很多初学者对此感觉非常诧异就 , 主要疑惑有:
1、公式中的2、1、0等数字有什么含义 , 明明在查找条件与这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、首先 , 条件是一组逻辑判断的值或逻辑运算得到的由TRUE和FALSE组成或者0与非0组成的数组 , 因而:1/(条件)的作用是用于构建一个由1或者#DIV!0错误组成的值 。
2、根据LOOKUP函数说明中的这一条:
【使用LOOKUP函数实现无序查询】如果 LOOKUP 函数找不到 lookup_value (即:2) , 则它与 lookup_vector 中小于或等于 lookup_value 的最大值(即:1)匹配 。
也就是说 , 要在一个由1和#DIV!0组成的数组中查找2 , 肯定找不到2 , 因而将返回小于或等于2的最大值(也就是1)匹配 。
为什么要用2来查找1或用1来查找0呢?因为如果有多个与第1参数相等的值 , 则Lookup就不一定返回“最后一个”所对应的记录 , 所以必须养成一个良好习惯 , 
而不要用:LOOKUP(1,1/(条件),…… , 或LOOKUP(,0/(条件),……
3、如果有多个满足条件的纪录 , 为何只返回最后一个 , 而不是第一个或其他呢?这个解释就需要二分法流程图的模拟了 。而对于一般使用者来说 , 只需要记住“查找满足条件的最后一个记录”可以使用通用公式
LOOKUP(2,1/(条件),查找数组或区域)

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

    推荐阅读