先上一个简单的例子,如图:
表中E2的公式该怎么写?
好吧,我再加个要求:必须用VLOOKUP!
路人甲:=VLOOKUP(D2,A:B,2,)
路人乙:=VLOOKUP(D:D,A:B,2,)
以上两个公式,结果都正确:
但是!
如果E2和E3换一下,其中一个公式的结果就不对了:
所以,正确的写法应该是路人甲的=VLOOKUP(D2,A:B,2,)
路人甲与路人乙的公式,差异在第一个参数,一个用了D2,另一个用了整D列。
关于这个参数的基本用法,在函数参数对话框里就说明得很清楚:
数字、引用或字符串,人家没说可以用数组、单元格区域,所以,查找值只能是一个。
但是函数有点这样的小脾气,绝大部分函数的参数,如果说明了只能是一个,我们不小心(gu yi)用了多个以后,这公式就摇身一变,成数组了。
比如Left函数,说好了是“从一个文本字符串的……”,第一个参数就该是一个单元格呀,可就是用了A1:A3三个单元格了,结果不仅有,而且还更高大上了。
同样的原理,是不是也可以用在VLOOKUP上?
不好意思,VLOOKUP是个异种!
VLOOKUP的第一个参数,就是一个值,如果用了多个,其结果,是一个伪内存数组。
路人乙:等下,啥叫伪内存数组?
呃……这个解释起来有点,那啥啥啥啊,要不这样吧,还是举实例,刚才那个Left数组的结果,是个内存数组,我们可以在外面再套其他函数,比如ConCat,一步到位合并三个单元格的左边那位:
而同样的手法用在VLOOKUP上,结果就……
所以,简言之,伪内存数组就是看上去长得像数组但其实其结果无意义的东东。
所~以~,路人乙的公式=VLOOKUP(D:D,A:B,2,)结果,其实是个伪内存数组。
路人乙:那为什么我的公式在特定情况下结果正确呢?
嗯,这个“特定”用得好!
这是因为结果正确的那个公式误撞到了绝对交集引用。
图文作者:小妖同学
联系客服