【发布时间】:2019-11-07 09:34:09
【问题描述】:
我的这组代码运行不正确。
它从 Sheets("one") 和 Sheets("two") 中获取名称列表,并且应该找到唯一的名称并将它们放在 表格(“三个”)。
- 两个列表都只是文本字符串。
- 两个列表不是连续的,这意味着一个名字可能在 与其他范围不同的行。它没有特定的顺序。
从外观上看,它只是取了一个完整的范围并使其输出,没有过滤掉任何名称。
对于这个例子,我在工作表“一”上有 150 个名字,而工作表“二”上有 160 个名字。我应该只在“三”表上看到大约 10 个唯一值。但是我得到的返回值正好是 160。
有什么想法吗?
Sub dupes()
Dim arrRanges(1) As Excel.Range
Dim dDedupe As New Scripting.Dictionary
Dim lngCounter As Long
Dim rngInspect As Excel.Range
Set arrRanges(0) = Sheets("one").Range("A2:A1000")
Set arrRanges(1) = Sheets("two").Range("A2:A1000")
For lngCounter = 0 To 1
For Each rngInspect In arrRanges(lngCounter).cells
If Not dDedupe.Exists(CStr(rngInspect.Value)) Then
dDedupe.Add CStr(rngInspect.Value), dDedupe.count
End If
Next rngInspect
Next lngCounter
'Output
Sheets("three").Range("A2").Resize(dDedupe.count).Value = Application.Transpose(dDedupe.Keys())
End Sub
【问题讨论】:
-
WAY 01 复制第三张表中的名称。使用
Data | Remove DuplicatesWAY 02 在 VBA 中使用DictionaryWAY 03 在 VBA 中使用Collection -
把list放在eachother下面看看
RemoveDuplicates -
如果您正在使用
Dictionary,但仍然出现重复,请检查是否有任何不可见的问题(例如额外的空格)使 VBA 认为字符串不同。也许使用Trim(Replace(CStr(rngInspect.Value)," ", " "))? -
您是要删除重复项还是只提取一次出现的值?
标签: excel vba for-loop filter unique