有多列的vlookup

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

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

它在B中输出:B在mySheet中find的值!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 

INDEX的工作比VLOOKUP快,我会build议使用。 这将减less许多vlookups将放在您的系统上的压力。

首先在包含MATCH的帮助列中find包含所需内容的行:

 =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 

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

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

我正在考虑你的问题,如果你对你正在查看的数据有所怀疑,我还有另一个build议你可以尝试。

在保存原始数据的“mysheet”中,添加一个将每列连接到一个单元格的新列,并在数据中不包含某种唯一的分隔符:

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

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

一旦你在新的表格中,你可以将结果分开。


分裂没有公式

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

select该列,然后在function区上的“ 数据”选项卡中,select“ 文本到列”

将其保留在分隔符处 ,点击下一步 。 取消选中标签 ,选中其他 ,然后input你的分隔符(在我的例子中是+)。

点击完成


用公式分割

使用=FIND()来定位每个分隔符,并且使用前面的分隔符作为Start_num来使用=MID()来提取每个分隔符集合之间的文本。

绝对是两种方法中较复杂的一种。

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

没有公式。没有输出。 所以不可能有一种方法只适用于1列的公式,并取而代之。 另一种可行的方法是,把我的公式放在1个单元格中,明智地使用$符号,并在giffy中拖动所有单元格,而不必将vlookup放置40次。

Vlookup有4个代码input

1 –查看值。 使用这个$A1 (在A上放$而不是1)

2 – 来源数据 – everywhere放置$符号

3 –列索引号 在你的整个数据上方,在第一行中,添加一个空行。将A1的值设为1,将B1的值设为2,将C1的值设为3,依此类推。 现在在公式中,而不是手动将“2”或“3”引用这些单元格。将Numberal放在$而不是列( B$1 )上。

4 – inputfalse0

然后拖到任何地方。

  1. 查找值。 使用这个$ A1(在A上放$而不是1)
  2. 源数据 – 随处放置$符号
  3. 列索引号 只需使用需要从中拉取数据的列名称(例如,如果查找值在列A中,并且您希望从列B中取值,则为COLUMN(B1))。
  4. inputfalse0