vlookup有多个列

时间:2014-08-08 15:22:08

标签: excel excel-formula excel-2010 array-formulas

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

=VLOOKUP(A1;'mySheet'!$A:$B;2;FALSE)

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

=VLOOKUP(A1;'mySheet'!$A:$C;3;FALSE)

但是,我正在使用超过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

我想得到:

ID|Name|Column 1|Column 2
-------------------------
 1|AB  |somedata|whatever1
 2|CB  |        |
 3|DF  |somedaty|whatever2
 4|EF  |somedate|whatever3

5 个答案:

答案 0 :(得分:3)

INDEX比VLOOKUP工作得快,我建议使用它。它可以减少许多vlookup会给你的系统带来的压力。

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

=MATCH(A1,'mySheet'!$A:$A,0)

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

=INDEX('mySheet'!B:B,$B1)

您的输出类似于:

ID|Name|Match |Column 1 |Column 2
-------------------------
 1|AB  |Match1|IndexCol1|IndexCol2
 2|CD  |Match2|IndexCol1|IndexCol2
 3|EF  |Match3|IndexCol1|IndexCol2

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

=INDEX('mySheet'!B1:B100000,$B1)

答案 1 :(得分:2)

我在考虑你的问题,如果你对你正在查看的数据进行了控制,我还有另外一个建议你可以试试。

在' mysheet'中保存原始数据,添加一个新列,将每个列连接到一个单元格中,并且数据中没有某种独特的分隔符:

=B1&"+"&C1&"+"&D1&"+"&E1 etc...

然后你可以为每一行做一个VLOOKUP或INDEX / MATCH,而不是40。

在新工作表中使用后,您可以将结果拆分出来。


不使用公式拆分

在下一栏中将查找公式的结果复制/粘贴为

选择该列,然后在功能区的数据标签中,选择文本到列

将其保留在分隔上,点击下一步。取消选中标签,选中其他,然后输入您的分隔符(在我的示例中为+)。

点击完成


按公式拆分

使用=FIND()找到每个分隔符,=MID()使用前一个分隔符作为Start_num,在每组分隔符之间拉出文本。

这两种方法肯定是比较复杂的。

答案 2 :(得分:1)

如果我正确理解,我要做的一件事就是使用=VLOOKUP(A1;'mySheet'!$A:LastColumn;COLUMN(B1);FALSE)。这样,当您将Vlookup向右拖动时,列引用将会移动。

答案 3 :(得分:0)

没有公式。没有输出。因此,不能只在1列上应用公式,而在其他列上使用公式。 另一种可行的方法是,将i公式放在1个单元格中,使用$符号进行智能拖动,并且无需将vlookup放置40次即可在所有单元格中拖动。

Vlookup有4个输入代码

1 - 查找值。使用此$A1(将A放在A而不是1)

2 - 来源数据 - 设置$标志everywhere

3 - 列索引编号在整个数据的正上方,在第1行,添加一个空行。将值1中的A1,B1中的值,C1中的3中,依此类推。现在在公式中,而不是手动放置" 2"或" 3"提供对这些单元格的引用。在Numberal上放置$,而不是列(B$1)。

4 - 输入false0

然后将它拖到任何地方。

答案 4 :(得分:0)

  1. 查找价值。使用这个$ A1(把A放在A而不是1)
  2. 来源数据 - 到处放置$标志
  3. 列索引号。只需使用需要提取数据的列名(例如,如果查找值在列A中,则为COLUMN(B1),并且您需要来自列B的值)。
  4. 键入false0