Vba 比较具有唯一列匹配的两张图纸

Vba 比较具有唯一列匹配的两张图纸,vba,excel,Vba,Excel,我如何用VBA或公式轻松地比较大型数据集Excel中的两张表格 我有两张每张10栏的纸。每张图纸都有B列,带有唯一的批号。我想比较两个工作表中具有相同B列值的行,如果其他9列中存在任何差异,请将整行复制到另一个新工作表中 例如: 第一张是母版纸。表1和表2的名称相同,但名称“b”的年龄不同,因此我需要表3中的名称b和年龄,表3中的年龄单元格应为彩色,因为年龄不同 如果我有大量的列,而不仅仅是年龄,很难识别,通常我会在每列上使用vlookup作为唯一名称,并使用If函数检查匹配与否。您可以尝试下

我如何用VBA或公式轻松地比较大型数据集Excel中的两张表格

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

例如:

第一张是母版纸。表1和表2的名称相同,但名称“b”的年龄不同,因此我需要表3中的名称b和年龄,表3中的年龄单元格应为彩色,因为年龄不同


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

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

先决条件: 1) 代码假定工作簿中有三张工作表,分别命名为Sheet1、Sheet2和Sheet3

2) Sheet1和Sheet2各有10列标题相同

下面的代码根据B列将表2上的数据与表1上的数据进行比较,即,如果在表1的B列中找到表2上B列的值,则代码将比较两张表中所有列的数据,如果数据不匹配或不同,则数据将复制到表3

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
子比较数据
将ws1标注为工作表,ws2标注为工作表,ws3标注为工作表
尺寸x,y,z,1
我和我一样长,我和我一样长
作为字符串的Dim str
Application.ScreenUpdating=False
设置ws1=图纸(“图纸1”)
设置ws2=图纸(“图纸2”)
设置ws3=图纸(“图纸3”)
ws3.Cells.Clear
ws1.范围(“A1:J1”)。复制ws3.范围(“A1”)
x=ws1.范围(“A1”).当前区域.Value
y=ws2.范围(“a1”).当前区域.Value
Set dict1=CreateObject(“Scripting.Dictionary”)
对于i=2到UBound(x,1)
第1条第(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)
接下来我
对于i=2到UBound(y,1)
如果dict1.存在(y(i,2)),那么
如果1.第(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),那么
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=拆分(str,“,”)
范围(“A”和Rows.Count).结束(3)(2).调整大小(1,10).值=z
如果结束
如果结束
接下来我
设置dict1=无
Application.ScreenUpdating=True
端接头
编辑: 如果您有兴趣突出显示Sheet2上与Sheet1上相应单元格不匹配的单元格,可以通过条件格式实现。 为此,请从单元格A1开始选择Sheet2上的全部数据,并使用下面给出的公式为条件格式制定新规则,并根据您的选择设置格式。 所以说Sheet2!E10与表1不匹配!E10然后是表2!E10将根据您在条件格式中设置的格式突出显示或格式化

用于条件格式的公式如下所示

=A1<>Sheet1!A1
=A1Sheet1!A1

第1页是主页,希望签入第2页。如果第2页中的Difference表示将整个raw复制到第3页,请添加一个示例(最好使用屏幕截图)来阐明您的确切需求。请添加您为解决任务而创建的代码或公式,并详细说明它们不适用于您的原因。您有访问权限吗?我建议导入或链接到工作表,然后生成查找不匹配的查询。Access意味着!!我找不到附加excel的选项,请您解释一下如何导入或链接到工作表,然后构建一个查找不匹配的QueryTNXX alot excel master,而不是将列从10增加到12 ws1.Range(“A1:L1”)可以吗?您的意思是如果您有12列而不是10列?如果是这样的话,您还需要在代码中增加下面的数组元素,并遵循类似于x(i,11)、x(i,12)、y(i,11)和y(i,12)的模式,无论您在何处找到它们。感谢所有的人,它工作得很好!!另一个问题是,在第3页中有什么不匹配的地方,有没有其他方法来识别哪些单元格发生了变化,好像我需要完整的原始数据,这很好,但也需要知道哪些单元格发生了变化,只是有单元格颜色或其他什么else@safwanSubodh Tiwari已经给了你原始问题的答案,所以你应该花点时间把它标记为已接受。在“真实”代码中实现正确答案的过程中,很可能会出现新的问题,但这不应该是所谓的“变色龙问题”的原因,这些问题会随着编码者不断变化的需求而不断变化。新的问题值得提出新的问题,同时也需要对提问者进行真正的编码part@user3598756很有名,给您带来不便,非常抱歉