美文网首页
应用技巧九:妙用LOOKUP函数升序与乱序查找

应用技巧九:妙用LOOKUP函数升序与乱序查找

作者: 陶泽昱 | 来源:发表于2018-07-24 21:30 被阅读0次

    应用技巧九:妙用LOOKUP函数升序与乱序查找

    LOOKUP函数具有向量和数组两种语法形式。

    LOOKUP(lookup_value,lookup_vector,result_vector)

    LOOKUP(lookup_value,array)

    向量语法是在由单行或单列(也就是“向量”)构成的第二参数中查找第一参数,并返回第三参数中对应位置的值。数组语法的第二参数可以使单行或单列,也可以是多行或多列,此时LOOKUP函数会根据第二参数的尺寸执行类似VLOOKUP函数或HLOOKUP函数升序查找的功能。

    LOOKUP函数要求第二参数(如为数组语法,则是第二参数的首行或首列)按升序排列,并与小于或等于查找值的最大值匹配。

    一、升序查找多个值

    例:如图1所示,“表1”中加油站名称按升序排列,要求计算“表2”中3个加油站的销售业绩之和。

    F7单元格的计算公式如下:

    {=SUM(LOOKUP(E3:E5,A3:C8))}

    思路解析:

    该公式要求A列加油站名称已按升序排序,LOOKUP函数公式查找出E3:E5数据区域中3个加油站的业绩为{1295;1110;1355},再进行求和,得到结果为3760。

    二、多区间判断数值等级

    例:如图2所示,要求根据《加油站等级标准》,按年销售量对D2:G10单元格区域中的加油站进行等级评定。

    根据年销售量与加油站等级的对应关系,使用常量数组{0;2000;4000;6000;8000;10000}分别表示从0至2000吨(不含2000吨)、2000吨至4000吨(不含4000吨)……10000吨以上,并以此对应B3:B8的加油站等级。

    在G2单元格中输入如下公式,并将公式向下复制填充至G10单元格:

    =LOOKUP(F2,{0;2000;4000;6000;8000;10000},$B$3:$B$B8)

    如果判断等级的数据区间为向上包含,例如(0,2000)、(2000,4000)等,则可以将第二参数加上一个小于F列数值最小当量的值(比如F列均为整数,则0.1不会影响其标准大小)来作为等级划分,例如如下公式:

    =LOOKUP(F2,{0;2000;4000;6000;8000;10000}+0.1,$B$3:$B$B8)

    思路解析:

    通过两个公式对比可以看出:利用LOOKUP函数升序查找并返回小于等于查找值对应结果的原理,当查找值为4000时,第1个公式的常量数值中小于等于查找值的是第3个元素4000,因此返回第三参数的第3个元素即B5的“三级站”;而第2个公式由于加了0.1,则小于等于查找值的最大值为2000,因此返回结果为B4的“四级站”。

    此类利用LOOKUP函数进行多个连续数值区间判断的方法,可以替代IF函数的复杂多层嵌套解法。

    三、乱序查找最后一个满足条件的记录

    按照LOOKUP函数的要求,第二参数的首列(行)必须升序排列,并且具有“如果LOOKUP找不到lookup_value,则它与lookup_vector中小于或等于lookup_value的最大值匹配”的特性。当所要查找的值大于被查找区域的所有同类型数据时,LOOKUP函数将返回最后一个与第一参数类型相匹配的值。

    例:如图3所示,A列中由数值、空单元格、错误值、文本等多种数据组成,要求取出最后一个文本、最后一个数值和最后一条记录。

    分别在C1:C3单元格中输入以下公式:

    公式1  =LOOKUP(“々”,A:A)

    公式2  =LOOKUP(9E+307,A:A)

    公式3  =LOOKUP(1,0/(A2:A10<>””),A2:A10)

    思路解析:

    公式1使用符号” 々”最为查找值,一般可以满足查找最后一个文本记录的需求,但当数据中有以” 々”字开头的字符串时,可以使用如下公式:

    =LOOKUP(PEPT(“々”,9),A:A)

    也就是可以查找以9个连续的“々”字开头的文本(一般不会有这样的记录)。

    公式2使用一个接近Excel规范与限制允许键入最大数值的数,即9*10^307作为查找值,可满足查找最后一个数值(含日期、时间)记录的需要。

    公式3则以0/(A2:A10<>””)构建一个0、#DIV/0!组成的数组,再用大于第二参数中所有数值的1(已经足够大)最为查找值,即可满足查找最后一个满足A2:A10不为空单元格条件的记录。

    可以归纳为如下内容:

    =LOOKUP(1,0/(条件),目标区域或数组)

    其中,条件可以是多个逻辑判断相乘组成的多条件数组。

    四、填补合并单元格的空缺

    例:如图4所示,A列的片区采用合并单元格方式,要求统计“东区”的加油站个数。

    在A13单元格中输入片区名称,在B14单元格中输入数组公式,即可得到加油站个数:

    {=SUM(--(LOOKUP(ROW(2:10),IF(A2:A10<>””,ROW(2:10)),A2:A10)=A13))}

    思路解析:

    在此例中,A列合并单元格实际只有A2、A6、A9这3个单元格有数据(示意如D列),其他单元格都是空单元格。因此不能直接用COUNTIF函数统计“东区”的个数,而需要将A3:A5、A7:A8、A10单元格分别填补数据后再统计。

    在公式中,利用IF函数判断,返回A列非空单元格的行号与FALSE,再利用LOOKUP函数查找ROW(2:10)构成的行号数组{2;3;4;5;6;7;8;9;10},根据“如果LOOKUP找不到lookup_value,则它与lookup_vector中小于或等于lookup_value的最大值匹配”的特性,例如查找行号4,则与之匹配的小于等于4的最大值为2,由此返回对应的A2单元格的“东区”,其他行同理类推。从而,LOOKUP函数构建了一个9行的数组,效果如图中F列所示。最后,再使用SUM函数统计该数组中等于A13单元格值的个数。

    相关文章

      网友评论

          本文标题:应用技巧九:妙用LOOKUP函数升序与乱序查找

          本文链接:https://www.haomeiwen.com/subject/mqzymftx.html