![当 range_lookup 设置为 TRUE 时,VLOOKUP 的真实算法是什么?](https://linux22.com/image/1496175/%E5%BD%93%20range_lookup%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%20TRUE%20%E6%97%B6%EF%BC%8CVLOOKUP%20%E7%9A%84%E7%9C%9F%E5%AE%9E%E7%AE%97%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我无法找到 Microsoft 参考资料来解释将 range_lookup 设置为“TRUE”(即找到“近似匹配”)时 VLOOKUP 的真实行为。他们的参考资料仅指导您按升序对查找表进行排序以获得“正确结果”,但没有解释该算法的工作原理,以便人们可以预测其在未排序表中的行为。
网上的许多文章试图解释为什么排序查找表很重要,当 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”!
有人知道实际的算法吗?
编辑:我犯了一个错误,但我的问题仍然存在。请参阅下面的评论。