2017-04-01 151 views
-1

如何以简单的方式比较Excel中的两张大数据集,无论是使用VBA还是使用公式?将两张表格与唯一的列匹配进行比较

我有两张每张10列。每张纸都有B列,并带有唯一的批号。我想比较两张表之间具有相同B列值的行,并且如果其他9列中存在差异,请将整行复制到另一张新表。

例如: enter image description here

表之一是主片。表1和表2的名称相同,但名称不同,名称为“b”,所以我需要名称b和第三张纸的年龄,而第三张纸的年龄单元应该是彩色的,因为年龄不同。

如果我有大量的列而不是年龄很难识别,通常我在每列上使用vlookup作为唯一,并使用if函数来检查匹配与否。

+0

片1是主片和要在片材2进行检查。如果在工作表2中发现差异,则表示将工作复制到工作表3 – safwan

+0

请添加一个示例(最好使用屏幕截图),以说明您确切需要的内容。 – jrook

+0

请添加您已经创建的代码或公式以解决您的任务,并详细说明他们为什么不能为您工作。 – Jeeped

回答

1

您可以尝试下面给出的代码。

先决条件: 1)代码假定存在名为Sheet 1中,Sheet 2中和表Sheet 3

2工作簿三片)表Sheet 1和sheet2具有各10列以相同的标头。

下面的代码将Sheet2上的数据与基于列B的Sheet1上的数据进行比较,即如果在Sheet1的列B中发现Sheet2上列B的值,代码将比较两个列中的所有列的数据如果数据不匹配或不同,数据将被复制到Sheet3。

Sub CompareAndCopyUnMatchedData() 
Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet 
Dim x, y, z, dict1 
Dim i As Long, j As Long 
Dim str As String 
Application.ScreenUpdating = False 
Set ws1 = Sheets("Sheet1") 
Set ws2 = Sheets("Sheet2") 
Set ws3 = Sheets("Sheet3") 
ws3.Cells.Clear 
ws1.Range("A1:J1").Copy ws3.Range("A1") 
x = ws1.Range("A1").CurrentRegion.Value 
y = ws2.Range("a1").CurrentRegion.Value 
Set dict1 = CreateObject("Scripting.Dictionary") 
For i = 2 To UBound(x, 1) 
    dict1.Item(x(i, 2)) = x(i, 1) & "," & x(i, 2) & "," & x(i, 3) & "," & x(i, 4) & "," & x(i, 5) & "," & x(i, 6) & "," & x(i, 7) & "," & x(i, 8) & "," & x(i, 9) & "," & x(i, 10) 
Next i 
For i = 2 To UBound(y, 1) 
    If dict1.exists(y(i, 2)) Then 
     If dict1.Item(y(i, 2)) <> y(i, 1) & "," & y(i, 2) & "," & y(i, 3) & "," & y(i, 4) & "," & y(i, 5) & "," & y(i, 6) & "," & y(i, 7) & "," & y(i, 8) & "," & y(i, 9) & "," & y(i, 10) Then 
      str = y(i, 1) & "," & y(i, 2) & "," & y(i, 3) & "," & y(i, 4) & "," & y(i, 5) & "," & y(i, 6) & "," & y(i, 7) & "," & y(i, 8) & "," & y(i, 9) & "," & y(i, 10) 
      z = Split(str, ",") 
      ws3.Range("A" & Rows.Count).End(3)(2).Resize(1, 10).Value = z 
     End If 
    End If 
Next i 
Set dict1 = Nothing 
Application.ScreenUpdating = True 
End Sub 

编辑: 如果你有兴趣,突出在Sheet2上的单元不与工作表Sheet1上相应的单元格匹配,您可以使用条件格式实现这一目标。 为此,从单元格A1开始选择Sheet2上的所有数据,并使用下面给出的公式为条件格式创建新规则,并根据您的选择设置格式。 因此,如果Sheet2!E10与Sheet1!E10不匹配,Sheet2!E10将按照您在条件格式中设置的格式高亮显示或格式化。用于条件格式

公式如下...

=A1<>Sheet1!A1 
+0

thnxx很多excel的主人,而不是增加从10列到12是可以的ws1.Range(“A1:L1”) – safwan

+0

你的意思是如果你有12列而不是10?如果是这样,你还需要增加下面的代码中的数组元素,例如x(i,11),x(i,12),y(i,11)和y(i,12)他们。 – sktneer

+0

谢谢所有人,它工作得很好!另一件事是什么都不匹配是在表3中,是否有任何其他方式来确定哪个单元格发生了变化,就好像我需要完整的原材料那样很好,但也需要知道哪个单元格发生了变化,只有单元格颜色或其他内容 – safwan

相关问题