当 range_lookup 设置为 TRUE 时,VLOOKUP 的真实算法是什么?

当 range_lookup 设置为 TRUE 时,VLOOKUP 的真实算法是什么?

我无法找到 Microsoft 参考资料来解释将 range_lookup 设置为“TRUE”(即找到“近似匹配”)时 VLOOKUP 的真实行为。他们的参考资料仅指导您按升序对查找表进行排序以获得“正确结果”,但没有解释该算法的工作原理,以便人们可以预测其在未排序表中的行为。

网上的许多文章试图解释为什么排序查找表很重要,当 range_lookup 设置为“TRUE”时,会出现以下行为:

  1. VLOOKUP 沿着最左边的列向下查找列表,直到找到大于被查找值的查找值,然后停止查找。
  2. 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”!

有人知道实际的算法吗?

编辑:我犯了一个错误,但我的问题仍然存在。请参阅下面的评论。

相关内容