前言: Vlookup函数公式也许你见过很多,但本文涉及的用法小编是第一次见,耐心看完,你肯定会有收获的。
昨天小编打开一位网友的Excel表格,顿时被他写的Vlookup长公式惊呆了:
=IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,2,0),VLOOKUP(A2,数据!$A$2:$O$4,3,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,4,0),VLOOKUP(A2,数据!$A$2:$O$4,5,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,6,0),VLOOKUP(A2,数据!$A$2:$O$4,7,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,8,0),VLOOKUP(A2,数据!$A$2:$O$4,9,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,10,0),VLOOKUP(A2,数据!$A$2:$O$4,11,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,12,0),VLOOKUP(A2,数据!$A$2:$O$4,13,0),IF(E2>=VLOOKUP(A2,数据!$A$2:$O$4,14,0),VLOOKUP(A2,数据!$A$2:$O$4,15,0),1%)))))))

上面公式的作用,是根据上图中 E列的单价从另一个表中查找对应的个人提成比例。查找要分两步:
1、根据A列的产品产代码从【数据】表找到对应行数, 如下图所示第4行。
2、然后根据单价查找所在的区间 ( 如下图所示H4单元格 209 比 216小 而且最接近) ,然后再找到对应的提成比例 2.50% 。
(提示:点击下图可以放大图片)

看上去好象没什么好办法,7种价格和对应提成,需要分别用Vlookup查找并逐一对比,然后找到最接近的价格并获取提成比率。于是就有了开头那位同学的长长的Vlookup函数公式。
有没有什么简单公式? 有:
=LOOKUP(E2, VLOOKUP(A2,数据!A:O,(8-ROW($1:$7))*2+{0,1},0) )

公式很短,但估计很多人看到这个公式很懵,因为这里要用到Vlookup函数鲜为人知的重组数据技巧。下面兰色就拆分开,一步步分析这个公式的原理:
兰色以前介绍过利用VLOOKUP函数隔列求和的技巧,本例就可以用这个思路把所有7个价格全提取出来。
=VLOOKUP(A7,A:O, ROW(1:7)*2 ,0)
注: ROW(1:7)*2 结果是一组数字,所以它作为Vlookup函数第3个参数后,结果也会返回同样数量的值,即所有的价格。如下图B7单元格公式结果所示

本例中需要区间查找对应的最接近价格,所以要用到lookup函数,只是lookup的第二个参数需要按 升序列,而上面图中结果是降序,所以Vlookup公式还需要改一下。
=VLOOKUP(A7,A:O, (8-ROW(1:7)) *2,0)
注:原来是1234567,用8减后就变成了7654321了。隔取数后也升序排列了。

因为本例最终要返回单价对应的提成比例,所以还需要把提成比例也提取出来。
=VLOOKUP(A7,A:O,(8-ROW(1:7))*2+ {0,1}, 0)
注: {0,1} 中的 0 是指提取价格时列数 +0 , 1 是提取提成率时列数 +1 ,而最终要得到两列的一组数,所以这里用了数组形式。上面公式最结结果如下图B7:C13区域所示。

用Vlookup函数把价格、提成率组成成了按升序排列的两列数组,余下的就是lookup的基本用法了: 从后向前查找比单价小且最接近的值 。即本文开头公式:
= LOOKUP(E2, VLOOKUP(A2,数据!A:O,(8-ROW($1:$7))*2+{0,1},0) )

总结:今天发现的这个用法,刷新了小编对Vlookup的认知,也是它最牛用法之一。Vlookup函数应用大全的教程看来也要重写一次了。