所以我被赋予了与excel中的工作表进行比较的任务,如果有匹配将一个单元格中的数据替换为另一个单元格,例如,我在2个excel表格中有2列,ID和名称,我想将工作表1中的ID与工作表2中的ID进行比较,如果找到匹配更新,则将该名称与该ID相关联。
第1页
ID Name
1 Thomas
2 Jerry
第2页
ID Name
3 Spike
1 Tom
因此,在上面的示例中,我需要代码才能看到ID 1在两个工作表中并更改工作表1中的名称以匹配工作表2,因此它看起来像这样:
ID Name
1 Tom
2 Jerry
我试图使用Vlookup,这让我可以看出它是否存在,但后来我不知道如何更改单元格以匹配现有单元格,这里是我的代码到目前为止:
Range("C2").Select
ActiveCell.Formula = _
"=IF(ISNA(VLOOKUP([@[ID]], 'Sheet2'!A:B,1,FALSE)), ""New"", ""Existing"")"
Do While Len(Range("A" & r).Formula) > 0
If (Range("C" & r).Value = "Existing") Then
Sheets("Sheet2").Range("A" & r & ":B" & r).Copy _
Destination:=Sheets("sheet1").Range("A" & r & ":B" & r)
Else
End If
我需要能够从Vlookup获取单元格编号,以便我可以在if语句中使用它来获取正确的数据。可能有一种更简单的方法,如果是这样,我愿意改变一切。
非常感谢任何帮助。
答案 0 :(得分:0)
我认为VBA不需要这项任务。由于“Sheet1”中的名称必须通过查看“Sheet2”中的数据来更新。以下公式可用于查找更新的名称(通过查看“Sheet2”中的数据)。
=IFERROR(VLOOKUP(A2,Sheet2!A2:B3,2,FALSE),B2)
使用IFERROR以保留“Sheet2”数据中未找到的名称。请查看示例的以下屏幕截图。
答案 1 :(得分:0)
最简单的方法是在第三张纸上创建A行中的3个标题:ID,名称和来源。将数据从表1复制到前两列,并使用文本表填充第三列1.对表2执行相同操作,但将其粘贴到表1数据下方。你应该得到这样的东西:
ID Name Source
1 Thomas Sheet 1
2 Jerry Sheet 1
3 Spike Sheet 2
1 Tom Sheet 2
然后,只需从此数据创建一个数据透视表,其中source为列,name为行,数据名称为count。看起来应该是这样的:
Name Sheet 1 Sheet 2 Total
Thomas 1 0 1
Jerry 1 0 1
Spike 0 1 1
Tom 0 1 1
然后,您可以对“总计”列进行排序,以查找总共有两个重复项。
使用此方法的另一个好处是,可以很容易地扩展它以比较三个或更多列表。