【Excel VBA 基础编程】第37讲,案例分享:从混乱到有序,用数据字典实现精准分类统计

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

案例需求与实现效果

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

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

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

参考代码

参考代码实现的逻辑是利用工作表函数Sum合计每一行的销售量,从而将12列数据转换成单列数据,然后再将它们写入到字典对象的条目中去

Sub SumByDictionary()    Dim i As Integer    On Error Resume Next    With 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 i        Range("R1:S1") = Array("电器", "总销售量")        Range("R2").Resize(.Count, 1) = WorksheetFunction.Transpose(.Keys)        Range("S2").Resize(.Count, 1) = WorksheetFunction.Transpose(.Items)        Range("R1").CurrentRegion.Borders.LineStyle = 1    End 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技能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wei1019

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值