使用此表:
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
答案的形式返回。
如果将列号更改为2
ie
=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!