网站首页 > 文章精选 正文
大家好,今日我们继续讲解VBA数组与字典解决方案,今日讲解第79讲内容:利用字典汇总数据的几种常见方法总结。
利用字典汇总并提取数据,是我们经常要用到的,利用字典排重性可以很方便得到一个主键不重复的数据汇总,在以往的各个章节中,我利用了各种方法达到这个目的,今日我就这个问题做一个总结,看看利用字典汇总数据的时候,都有哪些基本的方法,代码如何书写,还是以结合实例来讲解。
实例,如下面的截图,我们要根据A,B列数据的编号汇总一下各个编号的总金额。字典学习到这里,这个代码应该是很简单的了。
下面看我给出的代码:
Sub mynzsz_79() '第79讲 利用字典汇总数据的几种常见的方式总结
Sheets("79").Select
Set mydic = CreateObject("Scripting.Dictionary")
For i = 2 To UBound(myarr)
'第一种:用item方法
' mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) + myarr(i, 2)
'第二种:用dic(key)方法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)
'第三种:用dic.add方法
If Not mydic.exists(myarr(i, 1)) Then
mydic.Add myarr(i, 1), myarr(i, 2)
Else
'第1种写法:key写法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)
'第2中:item 写法
mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) + myarr(i, 2)
End If
Next
'清空数据区域,回填数据
[e:f].Clear
Range("a1:b1").Copy Range("e1")
Range("e2").Resize(UBound(mydic.Keys) + 1, 1) = Application.Transpose(mydic.Keys)
Range("f2").Resize(UBound(mydic.Keys) + 1, 1) = Application.Transpose(mydic.Items)
Set mydic = Nothing
End Sub
代码的截图:
代码分析:
1 上述代码中,我先后共有三种的书写方法,这三种方法都是实测可以利用的,学习的朋友可以根据自己的需要,或者自己的习惯选择其中的方法使用。
2 Set mydic = CreateObject("Scripting.Dictionary")
myarr = Range("a1").CurrentRegion.Value
上面的语句是创建字典,把要分析的数据装入字典,CurrentRegion的含义是返回Range对象,该对象代表当前的区域。当前区域是一个边缘是任意空行和空列组合成的范围,要理解这个概念,我在实际使用的时候,会更多的用区域的可控选择,大家可以在我的代码中经常看到,如:myarr = Range("a2:b" & Range("a2").End(xlDown).Row)
3 '第一种:用item方法
' mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) + myarr(i, 2)
上述语句是汇总数据的第一种写法,利用了键值item.
4 '第二种:用dic(key)方法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)
上述语句是汇总数据的第二种写法,更加的直观,但在字典多重嵌套的时候,看上去和理解起来有些难度了。
5 '第三种:用dic.add方法
If Not mydic.exists(myarr(i, 1)) Then
mydic.Add myarr(i, 1), myarr(i, 2)
Else
'第1种写法:key写法
'mydic(myarr(i, 1)) = mydic(myarr(i, 1)) + myarr(i, 2)
'第2中:item 写法
mydic.Item(myarr(i, 1)) = mydic.Item(myarr(i, 1)) + myarr(i, 2)
End If
上述语句是第三种写法是用mydic.Add和第二种方法的结合,理解起来不是很难的。
6 Range("e2").Resize(UBound(mydic.Keys) + 1, 1) = Application.Transpose(mydic.Keys)
Range("f2").Resize(UBound(mydic.Keys) + 1, 1) = Application.Transpose(mydic.Items)
上述语句回填数据,应用的时候非常的方便。
下面看代码的运行,是采用第三种方法代码:
今日内容回向:
1 利用字典在做数据汇总的时候,有哪些方法可以利用?
2 数据回填的时候,还有哪些方法呢?
- 上一篇: 送给自己的高冷霸气语录,句句自带气场
- 下一篇: 让自己快速成长的句子,内涵深刻,早读早受益
猜你喜欢
- 2025-03-13 让自己变优秀的早安心语,送给为梦想奋斗的00后
- 2025-03-13 天气多变,我对你的关心永不变;心情多变,我对你的感情永不变,早安
- 2025-03-13 活得简单不难,只需懂得为自己而活,为美好而生,为幸福而做
- 2025-03-13 有梦想才有希望,有梦想才有未来,早安
- 2025-03-13 你的一句话,是如何毁掉孩子关键能力的?
- 2025-03-13 Python快速入门教程:字典
- 2025-03-13 Python 中字典的鲜为人知的用法
- 2025-03-13 python散装笔记——140: 其他语言中`switch`语句的替代方案
- 2025-03-13 2019致自己的情感小句子,句句温暖走心,很适合发朋友圈
- 2025-03-13 2020小年必火的句子,经典暖心,发朋友圈首选
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 稳压管的稳压区是工作在什么区 (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)