删除重复的数组项 - VBA

Removing repeated array items - VBA

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

如果有任何提示或帮助,我将不胜感激!

非常感谢!

我已经帮你看过了。在第一个示例中,集合将仅包含唯一项。您可以遍历集合以访问它们。在第二个示例中,我使用了字典 - 您可以更轻松地获得独特的项目。

给你:

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 集合。作为奖励,恢复独特的物品更容易。您的独特物品被放入 variant/array 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 and here.

了解更多关于集合和词典的信息

您可以使用 Collection 或字典。

检查这段代码:

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