最近在一家德国企业进行培训时候,答疑过程中接收到一位工作人员对我的询问,是一个非常典型的匹配问题,但这个匹配问题相当的棘手。
我对他的数据模型进行简化,毕竟不能拿人家真实的数据文档,大概的意思就是要利用型号B和型号A两个条件,来匹配B2:E16的数据区域,得到相应的产品编号。
如果这个简单解决的,无非就是调整列的位置,然后vlookup函数进行匹配即可。可这位工作人员希望不要调整每个列的位置,因为表格是公司固定的模式。这样下来就麻烦了,型号A和型号B之间居然还隔着一个叫MTF的字段列,这个如何进行匹配呢?还有就是vlookup默认是向右查询,这次是向左查询,所以这个问题解决起来肯定有点难度?牛闪闪教大家牛牛的搞定。
解题思路是,利用vlookup的反向查询的if函数数组功能,构造一个符合vlookup函数的“虚拟数据区域”,然后利用vlookup函数实现匹配。
具体操作如下:
首先,我们构造vlookup的查询字段,是有型号A和型号B组合而成,所以vlookup函数的第一个参数为:I3&H3 。注意型号A在前面,型号B在后面,用&连接符连接起来。
接着构造一个vlookup函数的“虚拟数据区域”,如下图的愿望效果:
从上图可以看出,vlookup的虚拟构造区域,需要先型号A和型号B组合成一个新列,然后在把产品编号列放在右侧。那应该如何实现呢?利用if函数的数组功能。
使用的下段函数
if({1,0},C2:C16&E2:E16,B3:B16) 对照下图看,{1,0}中1表示左边,0表示右边。
C2:C16&E2:E16 表示将型号A和型号B连接后,放在数据的左边。
B3:B16 表示产品型号放在数据的右边。
从而在计算机的内存中构造出一个,上图红框处期望的两列的数据库查询区域。
最后就简单了,利用vlookup函数查询虚拟区域的第二列返回产品编号。完整的函数输入如下:
=VLOOKUP(I3&H3,IF({1,0},$C$3:$C$16&$E$3:$E$16,$B$3:$B$16),2,0)
注意函数录入完毕之后,需要按住ctrl+shift键,在敲回车键,然后函数外面产生一个大括号,函数才会生效,最后拖拽或双击数据填充柄实现其他行的匹配。
总结:本例算vlookup函数的高级用法,不单单是反向查询的问题,更是构造虚拟数据区域的问题。所以=VLOOKUP(I3&H3,IF({1,0},$C$3:$C$16&$E$3:$E$16,$B$3:$B$16),2,0) 红色部分推荐大家掌握。