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)
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)