删除重复的数组项 - VBA

时间:2015-01-22 16:45:30

标签: arrays excel vba excel-vba repeat

我在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}因为它是唯一没有重复的元素。

我会很感激任何暗示提示或帮助!

非常感谢!

2 个答案:

答案 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)。您可以从herehere了解有关馆藏和词典的更多信息。

答案 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的第一行,您可以检查您是否有唯一记录列表。