【问题标题】:Compare data between 2 sheets and move data to sheet3比较 2 个工作表之间的数据并将数据移动到 sheet3
【发布时间】:2022-01-28 23:26:56
【问题描述】:

我正在为我的情况寻找解决方案。现在我有一个包含 3 张纸的文件,其中我有 2 张纸中的数据。在第一张表“sheet1”中,我有许多行(~10k 行数据)和 10 列(A:J)的原始数据,在第二张表“sheet2”(~1k-8krows 数据)中,我有相同的 10 列像“sheet1”(A:J),数据只在“C”列。我使用的代码是:

Option Explicit
Sub CopyDuplicates()
    MsgBox "Procesul a inceput. Daca nu se regasesc date in 'Sheet3', " & _
           "inseamna ca datele din coloana 'C - Sheet2' nu se regasesc in 'Sheet1'"
    
    Dim ws1 As Worksheet, ws2 As Worksheet, ws3 As Worksheet
    Dim lr1 As Long, lr2 As Long, r As Long, r3 As Long
    Dim ar As Variant, i As Long
    
    Set ws1 = Sheets("Sheet1")
    Set ws2 = Sheets("Sheet2")
    Set ws3 = Sheets("Sheet3")
    ws3.Cells.Clear

    lr1 = ws1.UsedRange.Rows.Count
    lr2 = ws2.UsedRange.Rows.Count
    ws1.UsedRange.Interior.ColorIndex = xlNone
    ws2.UsedRange.Interior.ColorIndex = xlNone

    ' dictionar sheet2 coloana C
    Dim dict, key As String
    Set dict = CreateObject("Scripting.Dictionary")
    
    For r = 1 To lr2
        key = Trim(ws2.Cells(r, "C"))
        If Len(key) > 0 Then
            If dict.exists(key) Then
                dict(key) = dict(key) & ";" & r
            Else
                dict.Add key, r
            End If
        End If
    Next

    Application.ScreenUpdating = False
    r3 = 1 ' Sheet3
    ' scaneaza datele din Sheet1 daca se regasesc in Sheet2
    For r = 1 To lr1
        key = Trim(ws1.Cells(r, "C"))
        If dict.exists(key) Then
            ' functie copiere/stergere - datele regasite in urma scanarii le copiaza in Sheet3 urmand a fi sterse din Sheet1
            ar = Split(dict(key), ";")
            For i = LBound(ar) To UBound(ar)
                ws1.Range("A" & r).Resize(1, 10).Copy ws3.Range("A" & r3) ' A:J
                ws1.Range("A" & r).Rows.Delete
                r3 = r3 + 1
            Next
        End If
    Next
   
    Application.ScreenUpdating = True
    MsgBox "Proces finalizat cu succes."
End Sub

我的脚本将“sheet1”中的数据与“sheet2”中插入“C”列的数据进行比较,如果匹配,则从“sheet1”复制“sheet3”中的行,然后删除“sheet1”中匹配的行+第一行(表头)。如何从“sheet1”上的删除功能中跳过第一行(表头)?

编辑: 我添加了带有“sheet1”和“sheet2”的屏幕截图 sheet1 sheet2

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我想在第 2 行开始代码就足够了

    所以,而不是 对于 r = 1 到 lr1 放 对于 r = 2 到 lr1

    【讨论】:

    • 我修改r = 2后,代码不能正常工作,他没有复制sheet2中匹配的所有行。
    • 他是不是每一秒都漏掉了一个,???
    • 也许你将 For r = 1 更改为 lr2 - 这是错误的,请将 For r = 1 更改为 lr1
    • 感谢您抽出宝贵时间 Max,我们可以搬到聊天室吗?修改后还是不行。
    • 我通过添加另一个脚本来匹配 sheet3 中的数据并从 sheet1 中删除行来找到解决方案。再次感谢 Max 的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2020-09-13
    • 1970-01-01
    • 2021-10-04
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多