首页 > 解决方案 > 比较两个 Excel 工作表并在新工作表中显示新数据

问题描述

我在这个平台上讨论的所有主题中寻找我的问题的答案,例如比较两个工作表并找到差异,宏来比较两个工作表并突出显示差异等等......但我没有找到我想要的东西。

我的问题是;是否有可能比较两个具有不同布局的 Excel 工作表,如下所示?我愿意将历史工作表与新工作表进行比较,并在第三个工作表中显示历史记录中不存在的新工作表上的内容,例如:

在此处输入图像描述

我希望你能理解我的问题,并能够在这个话题上帮助我。我已经有一个比较两个工作表并显示差异的代码,但这还不足以解决我的问题。

Option Explicit

Sub CompareIt()
    Dim ar As Variant
    Dim arr As Variant
    Dim Var As Variant
    Dim v()
    Dim i As Long
    Dim n As Long
    Dim j As Long
    Dim str As String

    ar = Sheet1.Cells(10, 1).CurrentRegion.Value
    With CreateObject("Scripting.Dictionary")
        .CompareMode = 1
        ReDim v(1 To UBound(ar, 2))
        For i = 2 To UBound(ar, 1)
            For n = 1 To UBound(ar, 2)
                str = str & Chr(2) & ar(i, n)
                v(n) = ar(i, n)
            Next
            .Item(str) = v: str = ""
        Next
        ar = Sheet2.Cells(10, 1).CurrentRegion.Resize(, UBound(v)).Value
        For i = 2 To UBound(ar, 1)
            For n = 1 To UBound(ar, 2)
                str = str & Chr(2) & ar(i, n)
                v(n) = ar(i, n)
            Next
            If .exists(str) Then
                .Item(str) = Empty
            Else
                .Item(str) = v
            End If
            str = ""
        Next
        For Each arr In .keys
            If IsEmpty(.Item(arr)) Then .Remove arr
        Next
        Var = .items: j = .Count
    End With
    With Sheet3.Range("a1").Resize(, UBound(ar, 2))
        .CurrentRegion.ClearContents
        .Value = ar
        If j > 0 Then
            .Offset(1).Resize(j).Value = Application.Transpose(Application.Transpose(Var))
        End If
    End With
End Sub

提前致谢

标签: vbaexcel

解决方案


推荐阅读