vlookup有多个列

dnL*_*nLL 6 excel excel-formula excel-2010 array-formulas

我的B:B栏中有以下公式

=VLOOKUP(A1;'mySheet'!$A:$B;2;FALSE)
Run Code Online (Sandbox Code Playgroud)

它在B:B中输出mySheet中找到的值!B:B其中A:A = mySheet!A:A.它工作正常.现在,我想获得第三列.如果我将以下公式添加到整个C:C列,它可以工作:

=VLOOKUP(A1;'mySheet'!$A:$C;3;FALSE)
Run Code Online (Sandbox Code Playgroud)

但是,我正在使用超过10万行和大约40列.我不想做100k*40*VLOOKUP,我想只做100k而不必将其乘以所有列.是否有一种方法(使用数组公式)可以每行执行一次VLOOKUP以获得我需要的所有列?


数据示例

ID|Name
-------
 1|AB
 2|CB
 3|DF
 4|EF

ID|Column 1|Column 2
--------------------
 1|somedata|whatever1
 4|somedate|whatever2
 3|somedaty|whatever3
Run Code Online (Sandbox Code Playgroud)

我想得到:

ID|Name|Column 1|Column 2
-------------------------
 1|AB  |somedata|whatever1
 2|CB  |        |
 3|DF  |somedaty|whatever2
 4|EF  |somedate|whatever3
Run Code Online (Sandbox Code Playgroud)

Aar*_*ras 4

INDEX 的工作速度比 VLOOKUP 快,我建议使用它。它将减少许多 vlookups 给您的系统带来的压力。

首先使用 MATCH 在辅助列中找到包含所需内容的行:

=MATCH(A1,'mySheet'!$A:$A,0)
Run Code Online (Sandbox Code Playgroud)

然后使用该数字的索引,您可以将其拖动并填充所有列:

=INDEX('mySheet'!B:B,$B1)
Run Code Online (Sandbox Code Playgroud)

您的输出将类似于:

ID|Name|Match |Column 1 |Column 2
-------------------------
 1|AB  |Match1|IndexCol1|IndexCol2
 2|CD  |Match2|IndexCol1|IndexCol2
 3|EF  |Match3|IndexCol1|IndexCol2
Run Code Online (Sandbox Code Playgroud)

还!我建议设置这些范围以实际覆盖数据,而不是引用整个列,以获得额外的速度增益,例如:

=INDEX('mySheet'!B1:B100000,$B1)
Run Code Online (Sandbox Code Playgroud)