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

Vba 将sheet1中的整行复制到sheet2中,以匹配ID和列标题,vba,excel,Vba,Excel,如果ID匹配,是否需要按行复制数据取决于ID(唯一),复制和粘贴行时列标题应匹配。如果观察到表2中的列标题相同,但位置不同 我得到了vlookup公式,但只要ID不匹配,就会得到N/A,这会覆盖数据。。因此,我需要VBA代码我已成功地将以下公式用于您的示例: 将其放置在Sheet2>单元格B2的内部 Sheet1 ID First Last Street City State Zip --- ----- ------

如果ID匹配,是否需要按行复制数据取决于ID(唯一),复制和粘贴行时列标题应匹配。如果观察到表2中的列标题相同,但位置不同


我得到了vlookup公式,但只要ID不匹配,就会得到N/A,这会覆盖数据。。因此,我需要VBA代码

我已成功地将以下公式用于您的示例:

将其放置在Sheet2>单元格B2的内部

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
这里我们从范围表1中查找单元格A2$A$2:$G$7,然后我们返回第二列的值,FALSE=精确匹配

以下是避免自定义消息出现“N/A”错误的方法

=VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE)
如果vlookup结果是一个数字使用vlookup,否则,使用自定义错误消息

=IF(ISNA(VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE)),VLOOKUP($A2,Sheet1!$A$2:$G$7,2,FALSE), "CUTOM ERROR MESSAGE")
下面是一个示例,它显示了Sheet1中的内容$A$2:$G$7如果有匹配项如果没有匹配项

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

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

输入的结果可以基于与下面所示的工作表公式相同的逻辑

一种有效的方法是使用
索引
匹配
来获取查找表中的行和列,因此,如果两张表中的数据都是从A1开始的,则可以将以下内容放在第2页B2中,然后拖动以填充其他单元格

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

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

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

因此对于
ID56
您可以

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

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

匹配(Sheet2!B$1,Sheet1!A$1:$G$1,0)
=7作为列

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

如果找不到匹配项,请将其包装在IFERROR中。在本例中,返回“未找到”。

假设:

  • “表1”作为“源”表

  • “表2”作为“目标”表

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

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

你可以用这个

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

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

显示“接收到N/A错误”的内容我已经有了vlookup公式,但这里的问题是数据不应该覆盖ID不匹配的单元格。如果ID与工作表1匹配,则整行将被复制,但如果ID不匹配,则该公式再次给出#N/A。#未匹配的ID有一些重要的数据,不应该覆盖为#NA=vlookup($A$2,Sheet3!$A$1:$G$16,匹配(B1,Sheet3!$A$1:$G$1,0),0)我已经用Vlookup解决了这个问题,我将它转换成VBA代码,如果不匹配,你想显示什么?我不想什么都不显示..如果不匹配,它不应该更改单元格数据..就像单元格包含一些文本一样。如果它与ID不匹配,它应该反映该cellOk中包含的数据。等一下。更新答案。我会你不会得到“找不到”如果不匹配,则出错。它应该与单元格先前包含的数据保持一致。在Sheet2中,许多ID可能无法用于月报,月报中已包含不匹配ID的数据,因此我不想用“如果不匹配,则为N/A”覆盖它。我想您需要的似乎是某种VBA vlookup,因为您实际上在s中有数据heet2防止您在Sheet2中添加VLookup公式。我已经有了我使用的VLookup公式,它已经很好地工作了,但问题是Sheet2中已经有一些ID的数据,在应用此公式后会变为N/A(ID不会与sheet1中的ID匹配),如果不匹配,单元格数据应该保持不变=VLookup($A$2,Sheet1!$A$1:$G$16,匹配(B1,Sheet1!$A$1:$G$1,0),0)这工作得很好,但是当ID不匹配时面临N/A。不匹配的ID已经有一些数据了。整行正在得到N/A。我希望如果ID不匹配的话显示这些数据。我已经有了vlookup公式,但这里的问题是数据不应该覆盖在ID不匹配的单元格中…我不想显示任何内容…如果不匹配,则不应更改单元格数据..如单元格包含一些文本。如果与ID不匹配,则应反映该单元格中包含的数据您是否确实尝试了我的解决方案?在尝试要求您符合之前,目标“sheet2”在哪里在您的代码中?@harshakazama,sheet2被假定为活动的工作表。您的一致性请求与此无关。如果您确实尝试了我的解决方案,您就不会写关于可能用现有数据覆盖单元格的评论。因此,您可能想尝试我的代码,看看它是否适合您的问题。