什么叫做『棋盘法』汇总?

言归正传,今天我们要聊的是VBA中字典+数组的一种综合应用,多组数据汇总方案,我们称之为“棋盘法”,主要的数据是二维交叉,类似棋盘!
比如,我们下面的销售明细,想按照销售名称,对数量和金额进行汇总!
一般我们使用数据透视表,非常的简单
但是我们要使用VBA代码处理,该如何实现呢?
我们需要使用字典来记录每个汇总 销售名称的行,用二维数组装结果,具体我们来看代码!
完整代码:
思路讲解:
1、首先我们判断字典种类是否存在我们汇总的key(销售名称),如果存在我们就把他在汇总数组中所在的行取出,如果不存在,我们就把汇总行+1,并记录到字典中,首次记录,同步把汇总的key写入结果数组brr
2、字典中记录了每个需要汇总的内容所在的行,这样我们就可以根据key找到结果数组中对应的行,然后再加上本次需要相加的内容,一次累加,即可得到结果!
写入结果: 和数据透视表汇总完全一致
源码可复制使用:
'功能:VBA字典棋盘法-多列汇总'公众号:Excel办公实战'作者:E精精'日期:20210609'----------------------------------------------------Sub dataTotal() '------------数据源装入数组------------- Dim lRow As Long, arr, brr(1 To 1000, 1 To 3) With Sheet1 lRow = .Cells(Rows.Count, 1).End(3).Row arr = .Range("A2:D" & lRow).Value End With '---------结果字典、循环处理----------- Dim d As Object '申明字典变量 '后期绑定 Set d = CreateObject("scripting.dictionary") Dim i As Long, skey As String, n As Long Dim totalRow As Long For i = 1 To UBound(arr) skey = arr(i, 2) '销售名称 If Not d.exists(skey) Then n = n + 1 totalRow = n d(skey) = n '首次写入销售名称 brr(totalRow, 1) = skey Else totalRow = d(skey) End If '数量汇总 brr(totalRow, 2) = brr(totalRow, 2) + arr(i, 3) '金额汇总 brr(totalRow, 3) = brr(totalRow, 3) + arr(i, 4) Next '写入结果 With Sheet1 .Range("F21:Z1000").Clear .Range("F21").Resize(n, 3) = brr End With MsgBox "处理完成"End Sub
很多小白看到这里,可能就会有一个疑问,既然数据透视表这么简单,为什么还要写这么复杂的代码? ? ?
这么想,其实很正常,但是对于一些需要汇总的数据几十列、几十万行设置百万行的时候,就会明白代码的必要性,不管是公式和数据透视表,量大都会卡!
其次,代码可以一键处理,反复利用,也是一方面考虑~
(0)

相关推荐

  • 数据对比!从所有名单中提取出未经核酸检测的名单

    你好,我是刘卓.欢迎来到我的公号,excel函数解析.今天来分享一个数据对比(查找)的案例.现在有两份名单,一份是所有人的名单,另一份是已经核酸检测过的名单.要求是对比这两份名单,提取出未经核酸检测的 ...

  • Excel巧设公式(字典+数字)

    有个网友提了这样的一个需求:A中有包含重复值的数据,现在需要将重复值所在单元格的值改为公式引用.例如:A6单元格值为3,第一个出现3的单元格为A5,所以将A6公式设置为=$A$5,其他单元格依次类推. ...

  • 『中国地质图』汇总

    『中国变质地质图』 『中国大地质构造图』 『中国地图』 『中国地质图』 『中国非金属矿产资源图』 『中国航空磁力异常图』 『中国火山岩地质图』 『中国金属矿产资源图』 『中国前寒武纪地质图』 『中国侵 ...

  • 练瑜伽,常见的3种『收束法』练习方法及益处(经典)

    收束法 梵文:Bandha,音译:班达 有"束缚连接,收缩控制"之意 是瑜伽修习者 特有的一种练习方式 艾扬格大师曾在<瑜伽之光>中提到:"当气息通过呼吸控制 ...

  • 『皮肤性病』阴囊湿疹中医外治十法

    阴囊湿疹,中医称"绣球风". "肾囊风",多由湿热.风邪外袭及不洁等所致.初起时阴囊瘙痒,久则皮肤渐变肥厚,甚至皮上起疙瘩,抓破后流脂水.结痂,常生皲裂,影响工 ...

  • 『皮肤性病』皮炎日久试试灸法

    皮炎患者经常出现皮肤瘙痒.斑疹,搔抓之后出血脱屑等不适症状.如果治疗不及时,拖延日久,则会因为病邪损伤人体的正气而导致痊愈更慢的恶性循环.艾灸法有两种配方,皮炎日久不愈者不妨选方一试. 配方一:取白芷 ...

  • 『养生导引法』二十七、老人门

    (一)修真书六字诀 [原文]春嘘明目木扶肝,夏至呵心火自闲,秋定知金肺润,肾吹惟要坎中安,三焦嘻却除烦热,四季长呼脾化餐. 切记出声闻口耳,其功尤胜宝神丹. [解说]<修真书>中有一首六字 ...

  • 『养生导引法』二十六、诸痔门

    [原文]一法∶惟高枕,偃仰,心平气定,其肿自收. [解说]仰卧,将枕放高,心平气定的调息,可使痔疮肿痛自行消散. [原文]二法∶一足踏地,一足屈膝,两手抱犊鼻下,急挽向身极势.左右换易四七. 去痔,五 ...

  • 『养生导引法』二十五、疝气门

    [原文]一法∶挽两足趾五息止,引腹中气.去疝瘕,利孔窍. [解说]用手握拉两足趾,行气五息而止,引气达腹中,使腹中气动,可以消除疝气.腹中结块,使大小便通利. [原文]二法∶坐,舒两脚,以两手捉大拇趾 ...

  • 『养生导引法』二十四、二便不通门

    [原文]一法∶正坐,以两手交背后,名曰带便.愈不能大便,利腹,愈虚羸.反叉两手着背上,推上使当心许,坐反倒九通.愈不能大小便,利腹,愈虚羸也. [解说]正坐,两手交叉在背,名为带便.可治疗不能大便,使 ...

  • 『养生导引法』二十三、淋门

    [原文]一法∶偃卧,令两足(应为手)布膝头,斜踵置尻,口纳气,振腹,鼻出气.去淋,数小便. [解说]仰卧,曲腿,将两手放在膝头,脚跟尽量倾靠臀尾部,口吸气,鼻出气,使气达腹内,腹随呼吸上下起伏振动.可 ...