如何用VLOOKUP指定搜索列?

如何用VLOOKUP指定搜索列?

使用此表:

1   a    aaa
2   3    bbb
4   d    ddd
3   c    ccc

我想在第一列中搜索一个值,并获取第二列的值。

当然,这是可行的:

=VLOOKUP(1; A1:B4; 2)     => a
=VLOOKUP(2; A1:B4; 2)     => 3
=VLOOKUP(4; A1:B4; 2)     => d

但是,问题是:

  • =VLOOKUP(3; A1:B4; 2)给出3
  • =VLOOKUP(3; A1:C4; 3)给出bbb

这意味着3第二列中已搜索过...。为什么?

似乎=VLOOKUP(...; A1:B3; 2)搜索所有列A1:B3。

问题:如何指定我只想搜索第一列中的模式?

注意:=VLOOKUP(...; A1:A4; 2)不起作用并给出结果,#REF!因为第三个参数2提到的列超出了 A1:A4 范围。

答案1

这里是一个您可能会觉得有用的参考链接。

VLOOKUP只在第一列搜索。您已将range_lookup参数(第 4 个参数)留空,因此默认为TRUE。使用时,TRUE第一列中的数字顺序很重要。解决问题的最快方法是使用FALSE(仅精确匹配)例如

=VLOOKUP(3,A1:B4,2,FALSE)

答案2

另一种方法是使用 Index 和 Match 的组合来代替 Vlookup,这对于数据查找来说更加灵活。

对于您的示例表:

1   a    aaa
2   3    bbb
4   d    ddd
3   c    ccc

=Index(A1:C4,Match("3",A1:A4,0),3)

或者

=Index(A:C,Match("3",A:A,0),3)

执行以下操作:3使用 在第一列中查找引用的第一个匹配项,match返回行号 4,然后使用 查找索引数组中第 3 列第 4 行中的值 index

在第一个例子中,它搜索 4rx3c 数组,而在第二个例子中,它搜索 3 列宽的数组以查找整个工作表的长度。

它们都将以ccc答案的形式返回。

如果将列号更改为2ie

=Index(A1:C4,Match("3",A1:A4,0),2)

答案从第二列返回,给出c

答案3

@mikehunt3921 的回答是正确的:

  • VLOOKUP仅在第一列搜索。

  • 第四个参数FALSE是解决方案

我的例子纯属巧合,更多细节如下:

当缺少第 4 个参数时,它默认为TRUE(如 Mike 所解释的),然后“与查找值最接近的匹配”用来。

在我的例子中,它查看第一列,寻找3。它找到 1,然后是 2,然后是 4,我们超过了 3,所以它停止了这里(它不查看值为 3 的最后一行!)。因为它有未找到精确匹配,则取最接近的值,即2,其第二列为3。答案3!


另一个例子/证明在第二列中没有搜索任何内容:

1   a
17  3
6   d
3   c

=VLOOKUP(3;A1:B4;2)给出a

解释:我们在第一列中搜索 3。让我们循环遍历行:1,然后是 17,我们超过了 3,所以我们在这里停止。由于未找到 3,我们取最接近的值:1。

第二列是a。答案:a


TL;DR:除非有非常特殊的原因,否则始终将第 4 个参数设置为 0 / FALSE!

相关内容