微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

通过 Excel VBA 比较两个列表并更新缺失数据

如何解决通过 Excel VBA 比较两个列表并更新缺失数据

我一直在为以下 Excel VBA 任务而苦苦挣扎。 在同一个工作簿中有两个工作表 "Main""Data""Data" 中的信息来自外部来源,"Main" 包含需要与相应 ID 保持在同一行的单个评论数据。

此处的任务是运行一个宏 (VBA),将 "Main" 中的 ID 与 "Data" 中同一第一列中的 ID 进行比较。如果缺少任何 ID,它会将它们从 "Data" 复制到 "Main" 中的第一个空行并按 "Main" 排序,确保下一个单元格中的注释不会偏离相应的 ID。 附上截图示例:

Main Tab

Data Tab (compare and copy missing IDs from it)

解决方法

这是指南而不是答案

尝试使用这样的代码;

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

当您尝试过一些显示您尝试过的代码的东西时回来 - 或者发布您已经尝试过的代码

,

同事们好 感谢您的时间和建议。我设法对 VBA 进行了故障排除,并将其发布在这里,以供需要完成类似任务的任何人使用。 向所有人致以最诚挚的问候,并保持积极的态度。`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,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  `

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。