[英]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.