将sheet1中的整行复制到匹配ID和列标题的sheet2中

时间:2018-03-10 13:42:31

标签: excel vba excel-vba

Sheet1
    ID  First   Last     Street              City        State  Zip
   ---  -----   ------   -----------------   ----------  -----  -----
    51  Alfred  Obrien   636 Charla Lane     Richardson   TX    75081
    52  Donald  Lemmons  4956 Center Street  Umatilla     OR    97882
    53  Corrine McCann   3149 West Street    Grand Rap    MI    49546
    54  Monique Gavin    4078 Maryland       Largo        FL    34640
    55  Steven  Murray   965 Tree Top Lane   Lansdowne    PA    19050
    56  Kelley  Robins   1191 Earnhardt      Louisville   KY    40223

Sheet2
    ID  Zip     State    Last    City     first      Street  Zip
   ---  -----   ------   -----  ------    ------     -----   -----
    56
    51
    87
    52
    55
    53
    54

需要复制数据行依赖于ID(唯一)如果ID匹配复制并粘贴该行,则列标题应该匹配。如果您观察到列标题相同但在sheet2中位置不同。

我得到了vlookup公式但是如果ID没有匹配正在覆盖数据的话,#N / A就会收到...所以我需要VBA代码

3 个答案:

答案 0 :(得分:0)

我在您的示例中使用以下公式取得了成功:

将其置于Sheet2>内;细胞B2

=VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE)

这里我们查找单元格A2 ,从范围Sheet1!$ A $ 2:$ G $ 7 ,然后我们返回第二列的值,FALSE = 完全匹配

这是为了避免自定义消息出现#N / A错误。

=IF(ISNA(VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE)),VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE), "CUTOM ERROR MESSAGE")

如果vlookup 结果为数字使用vlookup ,则使用自定义错误消息

此处有一个示例,显示Sheet1中的内容!$ A $ 2:$ G $ 7 如果匹配如果没有。< / p>

=IF(ISNA(VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE)),VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE), VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE))

答案 1 :(得分:0)

如果使用代码执行此操作,则需要指定忽略在单元格中输入值的条件。然后在评估输入或忽略单元格的结果之前,创建一个循环来测试针对此条件的单元格。

输入的结果可以基于与下面显示的图纸公式相同的逻辑。

有效的方法是使用indexmatch获取查找表中的行和列,这样如果您的数据在两个工作表的A1中开始,您可以将以下内容放入工作表2 B2和拖动以填充其他单元格。

=IFERROR(INDEX(Sheet1!$A$1:$G$7,MATCH($A2,Sheet1!$A$1:$A$7,0),MATCH(Sheet2!B$1,Sheet1!$A$1:$G$1,0)),"Not found")

Lookup formula

以ID 56为例,公式首先索引工作表1中的查找表。这意味着您可以检索指定行和列参数的项目。

要查找行,公式会通过查看列A(我将范围限制为您正在使用的行)来匹配ID,并返回找到的行号(如果找到)。同样,通过将Zip与工作表1中的第1行匹配并返回找到的列来找到该列。

所以对于ID 56,你得到了

Sheet1!$A$1:$G$7作为查找范围

MATCH($A2,Sheet1!$A$1:$A$7,0) = 7行

MATCH(Sheet2!B$1,Sheet1!$A$1:$G$1,0) = 7列

所以INDEX(Sheet1!$A$1:$G$7,7,7) = ZIP 40223

如果未找到匹配项,请将此包装在IFERROR中。在这里的示例中,&#34; Not Found&#34;归还。

答案 2 :(得分:0)

假设:

  • “Sheet1”作为“来源”表

  • “Sheet2”作为“目标”表

  • 第1行的
  • 标题,范围从A到H列(即第1列到第7列)

  • 数据范围从第2行到第100行

你可以用这个

duplicated xml ressources

只需根据实际需要调整工作表名称和列/行开始/结束索引