我在Excel VBA中有一个问题:
假设我有一个数组:{a,b,c,d,a,a,b,e,f,d,c,e,g,f,e},其中一些元素被重复。
我想获得所有元素的列表而不重复一个:即{a,b,c,d,e,f,g}
我找到了一个删除重复元素(VBA Removing duplicates values in an array including the same value)的代码,但后来我获得了{g}因为它是唯一没有重复的元素。
我会很感激任何暗示提示或帮助!
非常感谢!
答案 0 :(得分:0)
我已经为你看过了。在第一个示例中,集合将仅包含唯一项。您可以遍历集合以访问它们。在第二个例子中,我使用字典 - 您可以更轻松地获得独特的项目。
你在这里:
Sub arr_parse_test()
Dim rra As Variant
Dim i As Integer
Dim Dict As New Collection
rra = Array("a", "b", "c", "d", "g", "a", "b", "z")
On Error Resume Next
For i = 0 To UBound(rra)
Dict.Add rra(i), CStr(rra(i))
If (Err.Number <> 0) Then Err.Clear
Next i
End Sub
为了完整性,这里是使用scripting.dictionary
的示例。它通常比VBA Collection更受欢迎。作为奖励,更容易恢复独特的物品。您的独特项目被隐藏在变体/数组rra2
中。看看
Sub arr_parse_test2()
Dim rra, rra2 As Variant
Dim i As Integer
Dim Dict As Object
Set Dict = CreateObject("scripting.dictionary")
rra = Array("a", "b", "c", "d", "g", "a", "b", "z")
For i = 0 To UBound(rra)
If (Not Dict.exists(CStr(rra(i)))) Then Dict.Add CStr(rra(i)), rra(i)
Next i
rra2 = Dict.Items
End Sub
它的工作原理是因为VBA集合和MS(脚本)字典只允许带有唯一键的项目。如果您尝试使用集合中已存在的键添加项目,则集合将会出错。因此on error resume next
声明。
使用字典,您可以在添加之前测试字典中是否已存在密钥(使用Dict.Exists
)。您可以从here和here了解有关馆藏和词典的更多信息。
答案 1 :(得分:0)
您可以使用Collection或Dictionary。
检查这段代码:
Option Base 1
Sub unique()
Dim arr As New Collection, a
Dim aFirstArray() As Variant
Dim i As Long
aFirstArray() = Array("a","b","c","d","a","a","b","e","f","d","c","e","g","f","e")
On Error Resume Next
For Each a In aFirstArray
arr.Add a, a
Next
For i = 1 To arr.Count
Cells(i, 1) = arr(i)
Next
End Sub
在excel的第一行,您可以检查您是否有唯一记录列表。