删除重复的数组项 - 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 的第一行,您可以检查您将拥有唯一记录列表。
我有一个问题 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 的第一行,您可以检查您将拥有唯一记录列表。