繁体   English   中英

比较两张表并检查不同的值/数据并更新主表

[英]Compare two sheets and check for different values/data and update master sheet

我正在尝试创建一个宏来比较两个工作表“主”和“子”,并根据 A 列(“ID”)检查“子”表中的任何新/不同条目。

“主”工作表中的数据:

   A            B           C  
1  ID           Name        Sales  
2  10          Sachin     5000  
3  20        Vikas    4000  
4  30        Nitin    7000  

“儿童”工作表中的数据:

   A         B        C  
1  ID        Name     Sales  
2  100       Rakesh   4500  
3  30        Nitin    7000  
4  110       Sanket   5500  

我正在尝试将“子”(ID=100 和 110)中的新条目添加到“主”表。

我写了这段代码:

Sub Compare_and_Update_Data()

Dim Master, Child As Worksheet
Dim i As Long, j As Long, mlr As Long, clr As Long

Set Master = Worksheets("Master")
Set Child = Worksheets("Child")

mlr = Master.Cells(Rows.Count, 1).End(xlUp).Row 'gets last row from Master sheet
clr = Child.Cells(Rows.Count, 1).End(xlUp).Row 'gets last row from Child sheet

For i = 2 To mlr
    For j = 2 To clr

    'Checks column "A" with unique value(ID) from both sheets and if new record found then update records in "A","B" and "C" column in Master sheet
        If Master.Cells(i, 1).Value <> Child.Cells(j, 1) Then
            Master.Cells(i, 1).Value = Child.Cells(j, 1)
            Master.Cells(i, 2).Value = Child.Cells(j, 2)
            Master.Cells(i, 3).Value = Child.Cells(j, 3)
        End If
    Next j
Next i

End Sub

我没有得到想要的 output。

谁能帮我弄清楚我应该如何更正代码以更新主表中的新/不同行或任何替代解决方案将真正帮助我。

在下面试试这个:

Sub Compare_and_Update_Data()

Dim Master, Child As Worksheet
Dim i As Long, j As Long, mlr As Long, mlri As Long, clr As Long

Set Master = Worksheets("Master")
Set Child = Worksheets("Child")

mlr = Master.Cells(Rows.Count, 1).End(xlUp).Row 'gets last row from Master sheet
clr = Child.Cells(Rows.Count, 1).End(xlUp).Row 'gets last row from Child sheet

Dim bIDNotfound As Boolean


For j = 2 To clr
    For i = 2 To mlr
    bIDNotfound = False
    'Checks column "A" with unique value(ID) from both sheets and if new record found then update records in "A","B" and "C" column in Master sheet
        If Master.Cells(i, 1).Value = Child.Cells(j, 1) Then

            bIDNotfound = True

        End If
    Next i

    If bIDNotfound = False Then
        mlri = Master.Cells(Rows.Count, 1).End(xlUp).Row 'gets last row from Master sheet
        Master.Cells(mlri + 1, 1).Value = Child.Cells(j, 1)
        Master.Cells(mlri + 1, 2).Value = Child.Cells(j, 2)
        Master.Cells(mlri + 1, 3).Value = Child.Cells(j, 3)
    End If

Next j

End Sub

让我知道它是否有帮助

实际上,它不会从 Child 复制所有行。 问题是因为你在child中已经有一行命名为30,Nitin,7000,这与Master中的相同,当两个不同的复制时,它似乎复制了所有。

为了测试它,在master中,将第30行,Nitin,7000更改为30,Nitin,5000。运行代码后,你仍然会看到30,Nitin,5000。这意味着它没有用Child的那个替换它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM