匹配两个不同工作表中的列并返回多个列[Excel]

时间:2017-08-09 17:35:05

标签: excel vba

所以这个问题看起来很简单,但相当复杂,但无论如何我都会试试运气。

有两张纸,两张纸都有相似的第一列(代码)。如果您愿意,代码就是“主密钥” - 每个代码在每个代码中都有很多不同的信息(大约200-300列数据)。而且,这些代码不相同并且是随机聚类的。其中一些代码确实匹配。我在样本图像中突出显示了与黄色匹配的代码。

所以我要做的是将与第一列(代码)匹配的所有数据列添加到新工作表中。我的样本表和理想的解决方案看起来像这样

Sheet Sample and Solution

我试图使用几个= vLookup函数来解决这个问题,但我一直陷入困境。我确实有几列数据,所以我甚至不确定= vLookup是否应该使用。我对Excel也很陌生,所以如果有人向我展示正确的方向,我会很高兴。

1 个答案:

答案 0 :(得分:0)

使用您提供的示例数据,我创建了以下解决方案。

在Sheet“Sheet Soln”单元格J1(可以是任何单元格,如果优先可以隐藏)中,此公式用于标识两个工作表中的匹配代码数量:=SUMPRODUCT(COUNTIF(Sheet2!A:A,Sheet1!A2:A7))A2:A7调整为符合你的实际范围。这样做是为了使这个计算只执行一次,然后再引用,以减少公式计算(提高工作簿效率)。

然后在您的工作表溶解中,单元格A2使用此公式并向下复制以仅获取两个工作表中存在的代码:=IF(ROW(A1)>$J$1,"",INDEX(Sheet1!$A$2:$A$7,MATCH(1,INDEX((COUNTIF(A$1:A1,Sheet1!$A$2:$A$7)=0)*COUNTIF(Sheet2!$A:$A,Sheet1!$A$2:$A$7),),0)))

在单元格B2中使用此公式并上下复制以获取其各自标题的代码值:=IF($A2="","",IFERROR(VLOOKUP($A2,Sheet1!$A:$E,MATCH(B$1,Sheet1!$A$1:$E$1,0),FALSE),VLOOKUP($A2,Sheet2!$A:$E,MATCH(B$1,Sheet2!$A$1:$E$1,0),FALSE)))