今天继续分享数据字典的使用技巧,帮助大家快速掌握这一数据结构并在工作中能熟练使用

案例需求与实现效果
如下图所示是一份销售明细,罗列了全年每个连锁店中每种电器的销售量,不同的店铺销售的电器会有些出入:有重复的电器也有该店铺特有的

现在要求按照电器名称进行统计总销量,并输出到R和S列,具体显示内容如下图:

这个案例也是工作或生活中经常会用到的,大家可以先思考,看看能不能独立编码实现?

参考代码
参考代码实现的逻辑是利用工作表函数Sum合计每一行的销售量,从而将12列数据转换成单列数据,然后再将它们写入到字典对象的条目中去
Sub SumByDictionary()Dim i As IntegerOn Error Resume NextWith CreateObject("scripting.dictionary")For i = 2 To ActiveSheet.UsedRange.Rows.Count.Item(CStr(Cells(i, 2))) = .Item(CStr(Cells(i, 2))) + WorksheetFunction.Sum(Range("C" & i & ":N" & i))Next iRange("R1:S1") = Array("电器", "总销售量")Range("R2").Resize(.Count, 1) = WorksheetFunction.Transpose(.Keys)Range("S2").Resize(.Count, 1) = WorksheetFunction.Transpose(.Items)Range("R1").CurrentRegion.Borders.LineStyle = 1End WithEnd Sub
关键代码解析,关于for循环语句,可以分解为以下几个步骤:
-
提取键名:CStr(Cells(i, 2)) 获取当前行B列的电器名称,并将其作为字典的键(Key);而CStr函数确保名称被转换为字符串格式,避免意外错误
-
计算行总和:WorksheetFunction.Sum(Range(“C” & i & “:N” & i)) 计算当前行从C列到N列(共12个月)的所有销售数据之和
-
累加至字典:.Item(键名) = .Item(键名) + 行总和。这行代码首先尝试读取字典中该电器名称当前的总值,然后加上本行的销售额,最后将新的总和存回字典。如果该电器名称是第一次出现,.Item(键名)会自动初始化为0,然后进行累加
通过这个循环,所有行的数据就被高效地按电器名称分类汇总了
另外,细心的朋友可能早就注意到第3行代码了,On Error Resume Next核心作用是当程序运行时遇到错误,不会中断停止,而是忽略出错的那一行代码,继续执行下一行。它适用于处理那些我们预料之中且可以安全跳过的特定错误

结束语
今天的分享就到这里了,下期我们继续
公众号同时也在不间断地分享免费的编程案例,如果想学习更多的编程知识,无论是用来提升自动化办公效率还是想提升自我,都可以关注我的公众号“努力鸭是黑色的”,解锁更多的VBA技能
248

被折叠的 条评论
为什么被折叠?



