在VBA中将两个集合合并在一起的最有效方法是什么?所以我有一个第三个集合包含前两个集合中的所有项目?
答案 0 :(得分:3)
阅读this article,在迭代数组时比较For
与For 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
添加到col1
(col1
已更改)
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()”,其他一切都可以保持不变。