ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 字典嵌套实例

字典嵌套实例

作者:绿色风 分类: 时间:2022-08-18 浏览:102
楼主
wcymiss
与大家分享vba字典嵌套用法一例。将字典的item值再定义为一字典。
如图,字典嵌套可以同时对B列数据按A列内容进行汇总到E列和按C列内容进行汇总到F列。见以下黄色部分效果:

 
vba代码如下:

  1. Sub justtest()
  2.     Dim d, arr, i&, t&, arrt(), s$, dd
  3.     Set d = CreateObject("scripting.dictionary") '定义父字典对象
  4.     Const st$ = "其中返入到"
  5.     t = Cells(Rows.Count, 1).End(3).Row - 1 'A列需要处理的有效数据个数(最后行号减去标题行)
  6.     arr = Range("a2:c" & t + 1).Value '将A至C列数据赋值给数组arr
  7.     For i = 1 To t '循环处理arr
  8.         If Len(Trim(arr(i, 1))) Then '如果数组arr不为空(既A列不为空)则:
  9.             If Not d.Exists(arr(i, 1)) Then
  10.                 d.Add arr(i, 1), 1 '将A列值(数组arr)装入父字典
  11.                 Set d(arr(i, 1)) = CreateObject("scripting.dictionary") '同时定义每个父字典元素的子字典
  12.             End If
  13.             If d(arr(i, 1)).Exists(arr(i, 3)) Then
  14.                 '如果子字典未赋值,则将C列值作为其key值,B列值作为其item值进行赋值;否则将item加上B列值
  15.                 d(arr(i, 1))(arr(i, 3)) = d(arr(i, 1))(arr(i, 3)) + arr(i, 2)
  16.                 Else: d(arr(i, 1)).Add arr(i, 3), arr(i, 2)
  17.             End If
  18.         End If
  19.     Next
  20.     If d.Count > 0 Then '如果父字典个数大于0
  21.         arr = d.keys: ReDim arrt(UBound(arr), 1 To 3) '重定义数组大小,以备生成E:G列数据
  22.         For i = 0 To UBound(arr)
  23.             s = ""
  24.             arrt(i, 1) = arr(i)
  25.             arrt(i, 2) = Application.Sum(d(arr(i)).Items) '合计总数量
  26.             For Each dd In d(arr(i)).keys
  27.                 If dd <> "" Then s = s & "、" & dd & ":" & d(arr(i))(dd) & "吨"
  28.             Next
  29.             arrt(i, 3) = IIf(s = "", "", st & Mid(s, 2)) '对子字典key值进行处理,处理成G列数据
  30.         Next
  31.         Range("e2:g" & Rows.Count).ClearContents '清除E:G列
  32.         Range("e2").Resize(i, 3) = arrt '拷贝数组到F:G列
  33.     End If
  34.     Set d = Nothing
  35. End Sub


字典嵌套实例.rar
2楼
jinhuio
楼主 备注一下啊
3楼
wise
定义子字典还可以这样应用啊?
4楼
hyl_2010
...........................................
5楼
wuliaors
强大 的字典呀,一定要学习

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap