通过 Excel VBA 比较两个列表并更新缺失数据
Compare two lists and update missing data through Excel VBA
我一直在努力完成下面的 Excel VBA 任务。
在同一工作簿中有两个工作表 "Main"
和 "Data"
。
"Data"
中的信息来自外部来源,"Main"
包含需要与相应ID保持在同一行的个人评论数据。
此处的任务是 运行 一个宏 (VBA),它将 "Main"
中的 ID 与 "Data"
中同一第一列中的 ID 进行比较。如果缺少任何 ID,它应将它们从 "Data"
复制到 "Main"
中的第一个空行并按 "Main"
排序,确保下一个单元格中的注释不会偏离相应的 ID。
附上截图示例:
这是指南,不是答案
尝试使用这样的代码;
MyListofNewValues = ""
for each TestRow in Sheets("Data").UsedRange.Rows
.... get a value to test
for each CheckRow in Sheets("Main").UsedRange.Rows
.... Check a value here with the value above
.... IF Different (ie New) add it to MyListOfNewValues
next CheckRow
Next TestRow
' Now you have a list of values in Data but Not in Main
' You'll have to add those to main & sort
当您尝试显示您尝试过的代码时回来 - 或post您已经尝试过的代码
同事们好,
感谢您的宝贵时间和建议。我设法对 VBA 进行了故障排除,并将 post 放在这里以供需要完成类似任务的任何人使用。
向所有人致以最诚挚的问候,并保持积极的态度。`Sub Compare()
'Set Ranges
With Worksheets("Data")
lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
compar = .Range(.Cells(1, 1), .Cells(lastrow, 1))
End With
Worksheets("Main").Select
lastdata = Cells(Rows.Count, "A").End(xlUp).Row
datar = Range(Cells(1, 1), Cells(lastdata, 1))
indi = lastdata + 1
'Logical Test
For j = 1 To lastrow
For i = 1 To lastdata
fnd = False
If datar(i, 1) = compar(j, 1) Then
' When Found
fnd = True
Exit For
End If
Next i
If Not (fnd) Then
For kk = 1 To 1
Cells(indi, kk) = compar(j, kk)
Next kk
indi = indi + 1
End If
Next j
'Sort Result
ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort.SortFields.Add2 _
Key:=Range("Table1[[#All],[ID]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Save
End Sub `
我一直在努力完成下面的 Excel VBA 任务。
在同一工作簿中有两个工作表 "Main"
和 "Data"
。
"Data"
中的信息来自外部来源,"Main"
包含需要与相应ID保持在同一行的个人评论数据。
此处的任务是 运行 一个宏 (VBA),它将 "Main"
中的 ID 与 "Data"
中同一第一列中的 ID 进行比较。如果缺少任何 ID,它应将它们从 "Data"
复制到 "Main"
中的第一个空行并按 "Main"
排序,确保下一个单元格中的注释不会偏离相应的 ID。
附上截图示例:
这是指南,不是答案
尝试使用这样的代码;
MyListofNewValues = ""
for each TestRow in Sheets("Data").UsedRange.Rows
.... get a value to test
for each CheckRow in Sheets("Main").UsedRange.Rows
.... Check a value here with the value above
.... IF Different (ie New) add it to MyListOfNewValues
next CheckRow
Next TestRow
' Now you have a list of values in Data but Not in Main
' You'll have to add those to main & sort
当您尝试显示您尝试过的代码时回来 - 或post您已经尝试过的代码
同事们好, 感谢您的宝贵时间和建议。我设法对 VBA 进行了故障排除,并将 post 放在这里以供需要完成类似任务的任何人使用。 向所有人致以最诚挚的问候,并保持积极的态度。`Sub Compare()
'Set Ranges
With Worksheets("Data")
lastrow = .Cells(Rows.Count, "A").End(xlUp).Row
compar = .Range(.Cells(1, 1), .Cells(lastrow, 1))
End With
Worksheets("Main").Select
lastdata = Cells(Rows.Count, "A").End(xlUp).Row
datar = Range(Cells(1, 1), Cells(lastdata, 1))
indi = lastdata + 1
'Logical Test
For j = 1 To lastrow
For i = 1 To lastdata
fnd = False
If datar(i, 1) = compar(j, 1) Then
' When Found
fnd = True
Exit For
End If
Next i
If Not (fnd) Then
For kk = 1 To 1
Cells(indi, kk) = compar(j, kk)
Next kk
indi = indi + 1
End If
Next j
'Sort Result
ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort.SortFields.Add2 _
Key:=Range("Table1[[#All],[ID]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Main").ListObjects("Table1").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
ActiveWorkbook.Save
End Sub `