大家好,我是小V。
前面我们介绍了VLOOKUP函数的精确匹配及模糊匹配用法!
今天我们来介绍VLOOKUP函数的另一种用法——反向查询。
首先,我们来回顾一下vlookup函数的语法结构:
VLOOKUP函数语法结构一定要掌握扎实,这是学习VLOOKUP函数的基础。
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)
第1个参数为查找值,代表根据什么查找;
第2个参数是查找区域,代表从哪里查找;
第3个参数是返回查找区域第几列的值;
第4个参数是判断精确查找还是模糊查找。
应用场景
我们来看这样一个案例:
某超市要统计2021年1月1日到1月5日各类别商品的销售情况,
现已知商品种类明细,和这5天各个商品的销售明细,如何计算出各个中类商品的销售情况?
分析问题
这里要统计每个中类商品的销售情况,首先要查询出每个商品对应的中类层级是什么?这里使用vlookup函数精确匹配查询,会返回错误值;
vlookup函数查询时,查找值必须在查找区域的首列。
这里查找值商品编号不在返回值中类编号列的左边,并且查找值也不在首列。
那么,如何解决这种问题呢?
解决方案
vlookup正向查找只能从首列开始往右查找,返回表格中首列右侧的内容。如果要正确查找到值就需要构建新的查找区域。在新区域中将查找值放在首列。这里问题就变为:改变第二个参数,如何构建新的区域?
我们可以借助IF函数来构建新的查找区域:
表达式:=vlookup(查找值,IF({1,0},查找值所在列,返回值值所在列),2,0)
逆向查找本质上是通过IF函数构造新的查找区域。
因为有数组输入,需要同时按ctrl+shift+enter得:
={vlookup(查找值,IF({1,0},查找值所在列,结果值所在列),2,0)}。
其中,IF函数表达式:=IF(判定条件,正确返回值,错误返回值)
{1,0}为一个数组,数值1对应查找值所在列,数值0对应结果值所在列,通过构造数组区域使查找值与结构值在数组内位置调换,实现逆向查找。
对于这种反向查找的问题,还可以用vlookup之外的其他方法解决:
下面分别列了出来,这里不花太多篇幅去讲,如果想进一步深入了解可以私信我或后台留言交流;
index+match查找:
=INDEX($B$2:$D$22,MATCH(J6,$D$2:$D$22,0),2)
vlookup+choose查找:=VLOOKUP(J6,CHOOSE({1,2},$D$3:$D$22,$C$3:$C$22),2,FALSE)
lookup函数查找:
=LOOKUP(1,0/($D$3:$D$22=J11),$C$3:$C$22)
下期预告:下期分享VLOOKUP函数多条件查询