我有两张 Excel 工作表,其中一张包含用户列表。而另一个列表包含相同的数据,只是同一用户被列出了多次。现在,我需要某种方法将第二个列表与第一个列表进行比较,并删除包含第一个列表中未找到的用户的行。
第一个列表如下所示:
- 保罗·麦卡特尼
- 约翰列侬
- 乔治·哈里森
- 林戈·斯塔尔
第二个列表可能如下所示:
- 保罗·麦卡特尼
- 保罗·麦卡特尼
- 保罗·麦卡特尼
- 约翰列侬
- 约翰列侬
- 约翰列侬
- 乔治·哈里森
- 乔治·哈里森
- 乔治·哈里森
- 林戈·斯塔尔
- 林戈·斯塔尔
- 林戈·斯塔尔
- 林戈·斯塔
- 林戈·斯塔
- 林戈·斯塔
因此,比较这两个列表,您会发现名称 Ringo Star 不在第一个列表中,我想删除这些行。我已经尝试了几个循环,但我无法完全让它工作。我想我可以将这些项目添加到某种数组中,并通过函数运行它。但是有没有一种简单的方法可以在不需要那么多代码的情况下做到这一点呢?
这次,您可以使用集合。
这是基于您之前的文件的尝试:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)