VBA循环创建新字典

时间:2018-11-27 16:01:37

标签: excel vba excel-vba dictionary unique

我在做什么?假定5个样本表。我遍历所有项目,并使用dictionary.exists方法仅添加唯一的项目。这样,我得到了一个具有唯一值的字典对象,问题是,我为此使用了相同的字典“ IDsDict”,并且我必须删除dict.items才能获得下一组唯一ID。

我想 a)从循环中单独“存储”字典,以便dict.RemoveAll不会影响该字典的副本 b)或为每次循环的新运行动态添加新字典

有可能吗?

For uniqueRow = LBound(IDsDataFiltered, 2) To UBound(IDsDataFiltered, 2)
            If Not IDsDict.Exists(IDsDataFiltered(1, uniqueRow)) Then
                counter = counter + 1
                globalcounter = globalcounter + 1
                'Add to Dictionaries
                IDsDict.Add IDsDataFiltered(1, uniqueRow), globalcounter
            End If
Next uniqueRow

collUniqueDicts.Add IDsDict, timeStampsIDs
IDsDict.RemoveAll

编辑:最终,我想找出不同表中的唯一ID集,并从这些表中返回其他列。应用:假定每个表都有ID,时间戳和位置。这样,我就可以跟踪ID在一段时间内的位置。

2 个答案:

答案 0 :(得分:2)

您要存储5次相同的对象指针-.RemoveAll会清除您在上一次运行中添加的项目,因此最终得到同一词典的5份副本,只有最后添加的项目(假设RemoveAll不在上一次迭代中运行?)。

如果要5个对象,则需要5个不同的指针。

我将把填充字典的代码放入其自己的返回字典的函数中。

Private Dictionarize(...) As Dictionary
    Dim result As Dictionary
    Set result = New Dictionary
    '...populate one dictionary
    Set Dictionarize = result
End Function

为函数提供所需的参数,然后根据需要调用5次:

collUniqueDicts.Add Dictionarize(...)

答案 1 :(得分:0)

在每个样本处理之后,代替IDsDict.RemoveAll创建一个新的Dictionary

Set IDsDict = New Dictionary