我无法找到解释VLOOKUP的真实行为的Microsoft参考,其range_lookup设置为'TRUE'(这意味着找到“近似匹配”)。它们的引用仅指示您按升序对查找表进行排序以获得“正确结果”,但不解释算法如何工作以便可以预测其在未排序表中的行为。
当range_lookup设置为“TRUE”时,许多在线文章试图通过提出以下行为来解释为什么排序查找表很重要:
- VLOOKUP沿着最左侧列的列表向下,直到它找到一个大于查找值的查找值然后停止查找。
- VLOOKUP返回与其停止查看的行中的查找值相关联的输出值。
这无疑将解释为什么未排序的列表会导致有问题的输出。但是,我仍然决定测试它,看看这是否确实是这种功能的方式。考虑以下查找表及其在A1中的左上角单元格:
1 a
99 b
3 c
4 d
现在让我们做一些值查找:
搜索1:在所提出的算法的上下文中考虑VLOOKUP(1,A1:B4,2,TRUE)。VLOOKUP沿着左列向下,看到1,继续前进,看到99.这大于1.它返回它上面的行的第二列中的值。精细。算法期望返回'a'。Excel返回'a'。
搜索2:使用VLOOKUP(2,A1,B4,2,TRUE),VLOOKUP向左下列,看到1,继续前进,看到99.这大于2.它返回第二列中的值它上面的那一行。根据算法工作。算法期望返回'a'。Excel返回'a'。
搜索3:使用VLOOKUP(3,A1,B4,2,TRUE),VLOOKUP向左下列,看到1,继续前进,看到99.这大于3.它返回第二列中的值它上面的那一行。根据算法工作。算法期望返回'a'。Excel返回'a'。
搜索4:使用VLOOKUP(3,A1,B4,2,TRUE),VLOOKUP向左下列,看到1,继续前进,看到99.这大于4.它应该返回第二列中的值在它上面的行。但事实并非如此。算法期望返回'a'但Excel返回'd'!
有谁知道实际的算法?
编辑:我犯了一个错误,但我的问题仍然存在。请参阅下面的评论。
现在,如果你超过99,它将返回'd',因为当它下降时,它试图找到100大于一个单元但小于下一个单元的位置。它没有找到它所以它返回具有数字的范围中的最后一个单元格。
—
Scott Craner
对不起,我搞错了。我使用的范围是一行大于查找表的范围。这意味着它包含一个空行。所以它是'A1:B5'。但是我确实在该实例中获得了4的返回值的查找值。知道为什么会这样吗?这仍然不与提出的算法相匹配,因为它应该在'99'处停止。
—
user2686410 2016年
如果完全匹配,你可以写False而不是True而不需要升序Tutorial
=VLOOKUP(4,$A$1:$B$4,2,TRUE)