如何在VBA中合并两个集合?

时间:2017-12-11 16:43:44

标签: vba collections merge

在VBA中将两个集合合并在一起的最有效方法是什么?所以我有一个第三个集合包含前两个集合中的所有项目?

3 个答案:

答案 0 :(得分:3)

阅读this article,在迭代数组时比较ForFor Each循环,与迭代对象集合时进行比较。

底线:

  • 使用For循环来迭代数组。
  • 使用For Each循环来迭代集合。

因此,使用For Each循环迭代您的集合,并在这些循环中Add将项目复制到3 rd 集合。

答案 1 :(得分:1)

您可以通过循环浏览项目并将其添加到新集合或原始集合之一来合并集合。 这不会保留集合2中的密钥 - 如果您想这样做,则无法使用集合

如果您要将Collection col2中的项目添加到另一个Collection col1并返回新合并的Collection

Function mergedCollection(ByVal col1 As Collection, ByVal col2 As Collection) As Collection
    'Add items from col2 to col1 and return the result
    'ByVal means we are only looking at copies of the collections (the values within them)
    'The function returns a NEW merged collection
    Dim i As Long 
    For i = 1 To col2.Count
        col1.Add col2.item(i)
    Next i
    Set mergedCollection = col1 'set return value
End Function

直接将col2添加到col1col1已更改)

Sub mergeCollectionsInPlace(ByRef col1 As Collection, ByVal col2 As Collection)
    'Routine to add items from col 2 directly to col1
    'ByRef col1 means we are adding directly to the original col1
    'Routine doesn't return a new collection, it just appends col2 to col1
    Dim i As Long
    For i = 1 To col2.Count 'loop through each item in collection 2
        col1.Add col2.item(i) 'add the item at index i to collection 1
    Next i
End Sub

使用每个

Dim col3 As Collection
Set col3 = mergedCollection(col1, col2) 'sets col3 to be the merge of the two collections
mergeCollectionsInPlace(col1, col2)     'sets col1 to be the merge of the two collections

答案 2 :(得分:0)

这使您可以使用先前答案中指定的循环类型将两个或多个集合合并为一个新集合。

Function MergeCollections(ParamArray collections())
    Set MergeCollections = New Collection
    For i = LBound(collections) To UBound(collections)
        For Each c In collections(i)
            MergeCollections.Add c
        Next
    Next
End Function

上面的函数允许您将每个集合作为单独的参数输入。如果您的集合已经在一个数组(集合的数组)中,那么参数可以只是“集合”而不是“ParamArray collections()”,其他一切都可以保持不变。