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