Excel 防止循环更新所有子字典值

Excel 防止循环更新所有子字典值,excel,vba,dictionary,Excel,Vba,Dictionary,几周来一直在谷歌上搜索和尝试,但还没有找到解决方案 我有一个循环,它遍历一个条目列表,并试图将它们编成字典。 我的循环首先检查键是否存在于我们的主字典中——如果不存在,它将创建键和所需的子字典——然后检查需要更新的子字典值。下面是代码的简化 我在excel表格中有以下数据: A. B. C. 1 product1 item1 used

几周来一直在谷歌上搜索和尝试,但还没有找到解决方案

我有一个循环,它遍历一个条目列表,并试图将它们编成字典。 我的循环首先检查键是否存在于我们的主字典中——如果不存在,它将创建键和所需的子字典——然后检查需要更新的子字典值。下面是代码的简化

我在excel表格中有以下数据:

         A.                B.                C.                
1    product1            item1              used
2    product2            item2              new
3    product1            item3              removed
4    product1            item3              removed
5    product3            item5              new
6    product4            item2              new
7    product2            item1              used
8    product1            item3              new
9    product4            item2              removed
10   product5            item1              used
因此,现在循环应该遍历每一行,并确定每个产品中有多少已使用、新的和已删除的项目

Sub example()
Set test_dict = New Scripting.Dictionary

    For i = 1 To 10
        product_name = Cells(i, 1).Value
        item_name = Cells(i, 2).Value
        item_status = Cells(i, 3).Value

        If test_dict.Exists(product_name) = False Then
            Set item_dict = New Scripting.Dictionary
                item_dict.Add item_name, 0
            Set status_dict = New Scripting.Dictionary
                status_dict.Add "used", item_dict
                status_dict.Add "new", item_dict
                status_dict.Add "removed", item_dict
            test_dict.Add product_name, status_dict
        End If
        test_dict(product_name)(item_status)(item_name) = test_dict(product_name)(item_status)(item_name) + 1
    Next

End Sub
它应该产生这样的结果:

test\u dict
| 
|-->“产品1”
||-->“已使用”
|| |->项目1=1
||'->“项目3”=0
||->“新”
|| |->项目1=0
||'->“第3项”=1
|“->”已删除
||->“项目1”=0
|'->“项目3”=2
|-->“产品2”(等)
但不管出于什么原因,我的循环不断更新所有子循环,即

test\u dict
| 
|-->“产品1”
||-->“已使用”
|| |->“项目1”=1*“项目3”=2*“项目3”=2*“产品2”(等)
你知道我做错了什么吗? 我一次又一次地检查我的代码,我尝试了不同的方法来做同样的事情,但不知何故,我总是遇到问题

            status_dict.Add "used", item_dict
            status_dict.Add "new", item_dict
            status_dict.Add "removed", item_dict
您在此处添加了三次相同的字典对象
条目

因此,如果在3个实例中的任何一个实例中+1,它将影响所有实例

为了避免这种情况,您需要为3个实例中的每个实例创建一个新的字典对象

编辑:例如

Set status_dict = New Scripting.Dictionary
For x = 1 To 3
    Set item_dict = New Scripting.Dictionary
    item_dict.Add item_name, 0

    strStatus = Choose(x, "used", "new", "removed")
    status_dict.Add strStatus, item_dict
Next x
test_dict.Add product_name, status_dict

你是否应该制作这样的词典,例如product-Item3-removed=2?哦,天哪,这太简单了!!工作得很好!谢谢你,伙计!我不知道它会把这些dict对象彼此联系起来。我一直认为它会把它们当作复制品。再次感谢!这是一个巨大的解脱!祝你周末愉快!:)