Excel 防止循环更新所有子字典值
几周来一直在谷歌上搜索和尝试,但还没有找到解决方案 我有一个循环,它遍历一个条目列表,并试图将它们编成字典。 我的循环首先检查键是否存在于我们的主字典中——如果不存在,它将创建键和所需的子字典——然后检查需要更新的子字典值。下面是代码的简化 我在excel表格中有以下数据:Excel 防止循环更新所有子字典值,excel,vba,dictionary,Excel,Vba,Dictionary,几周来一直在谷歌上搜索和尝试,但还没有找到解决方案 我有一个循环,它遍历一个条目列表,并试图将它们编成字典。 我的循环首先检查键是否存在于我们的主字典中——如果不存在,它将创建键和所需的子字典——然后检查需要更新的子字典值。下面是代码的简化 我在excel表格中有以下数据: A. B. C. 1 product1 item1 used
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对象彼此联系起来。我一直认为它会把它们当作复制品。再次感谢!这是一个巨大的解脱!祝你周末愉快!:)