Excel vba - Compare two ranges and find non matches

后端 未结 3 2049
广开言路
广开言路 2021-01-06 15:34

I\'ve got two Excel sheets where one sheets consists of a list of users. And the other list contains the same data, only the same user is listed several times. Now, I need s

3条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2021-01-06 15:48

    This time, you could use a collection.

    Here is a try based on your previous file:

    Option Explicit
    
    Sub test()
    Dim i As Long
    Dim arrSum As Variant, arrUsers As Variant
    Dim cUnique As New Collection
    
    'Put the name range from "Summary" in an array
    With ThisWorkbook.Sheets("Summary")
        arrSum = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    
    '"Convert" the array to a collection (unique items)
    For i = 1 To UBound(arrSum, 1)
        On Error Resume Next
        cUnique.Add arrSum(i, 1), CStr(arrSum(i, 1))
    Next i
    
    'Get the users array
    With ThisWorkbook.Sheets("Users")
        arrUsers = .Range("A2", .Range("A" & Rows.Count).End(xlUp))
    End With
    
    'Check if the value exists in the Users sheet
    For i = 1 To cUnique.Count
        'if can't find the value in the users range, delete the rows
        If Application.WorksheetFunction.VLookup(cUnique(i), arrUsers, 1, False) = "#N/A" Then
            With ThisWorkbook.Sheets("Summary").Cells
                .AutoFilter Field:=1, Criteria1:=cUnique(i)
                .Range("A2", .Range("A" & Rows.Count).End(xlUp)).EntireRow.Delete
            End With
        End If
    Next i
    'removes AutoFilter if one remains
    ThisWorkbook.Sheets("Summary").AutoFilterMode = False
    End Sub
    

提交回复
热议问题