比较具有唯一列匹配的两个工作表

时间:2017-04-01 18:01:11

标签: excel vba excel-vba

如何以简单的方式比较Excel中庞大的数据集中的两张表格,无论是VBA还是公式?

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

例如: enter image description here

第一张是主表。第一页和第二页有相同的名称,但名称​​“b”的年龄不同,所以我需要名称​​ b 和年龄在表3中,年龄单元格应该是彩色的在表3中,因为年龄不同。

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

1 个答案:

答案 0 :(得分:2)

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

<强>先决条件: 1)代码假定工作簿中有三个工作表,名为Sheet1,Sheet2和Sheet3

2)Sheet1和Sheet2有10列,每列都有相同的标题。

下面的代码将Sheet2上的数据与Sheet1上基于B列的数据进行比较,即如果在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