VLOOKUP技巧-使用近似匹配如何找到真的匹配结果
使用VLOOKUP函数的近似匹配时会遇到返回的结果不正确(不是错误值!),你可以用下面的技巧解决这个问题!
前言
VLOOKUP函数的近似匹配一般用于数值类型的分段查找,我们以前介绍过。不过在一些特殊情况下,我们可以在文本类型的查找中使用近似匹配。
比如,
一般情况下,C5的公式如下:
=VLOOKUP($B5,$I$5:$O$10,MATCH(C$4,$I$4:$O$4,0),0)
其中用到了match函数,是为了动态返回不同的列。具体请看这里。
但是,如果这个表比较大,比如,有几千行甚至更多,这时,有可能你的Excel表格就会运行缓慢,每次输入一个数据,都要计算半天。
特别强调一下,此时,尽量不要用手动计算模式。它带来的问题远超过它的好处!切记
此时,我们可以将公式改成:
=VLOOKUP($B5,$I$5:$O$10,MATCH(C$4,$I$4:$O$4,0),1)
注意,前后两个公式的区别就是最后一个参数从0变成了1,VLOOKUP从精确匹配改为近似匹配。
这么一改,你的表格的计算速度会提升5-10倍(具体提升速度根据数据量不同而不同,数据量越大,提升的越多)
这么改有一个要求,就是右边中必须按照第一列升序排序。不过相对于速度的提升,这个要求应该不算什么了。
问题
但是,这个公式有一个问题:
“华筝”这个任务没有在右表中出现,如果用精确匹配的话,会返回一个#N/A的错误值,我们很容易就会知道出了问题,去补充右表就可以了。但是现在使用了近似匹配,并没有返回错误值,但是得到了错误的结果。我们就很难发现是否资料不完整。
这是由VLOOKUP近似匹配的原理导致的。只要用近似匹配,就会出现这个问题。
解决方案——二次查找
解决这个问题,只需要将公式改为:
=IF(VLOOKUP($B9,$I$5:$O$10,1,1)=$B9,VLOOKUP($B9,$I$5:$O$10,MATCH(E$4,$I$4:$O$4,0),1),"")
这里我们使用了IF公式,在条件部分,我们使用
VLOOKUP($B9,$I$5:$O$10,1,1)=$B9
VLOOKUP函数返回的是第一列,即姓名,我们判断的是这个返回的姓名是否等于我们的查找值,如果True,表示真的找到了匹配行,于是就返回原来的查找公式:
VLOOKUP($B9
,$I$5:$O$10,MATCH(E$4,$I$4:$O$4,0),1)
如果False,表示找到了假的匹配行,返回一个空白单元格
下面是返回结果:
不要担心两次VLOOKUP会导致速度变慢。这个影响微乎其微!
·end·