VBA中字典的每一个key对应一个唯一的item,只要指定key的值,就可以马上返回其对应的item,利用字典这一特性可以实现快速的分类汇总。分类汇总可以分以下四种情况:

1、单条件单列汇总,如求商品A的总销量。

思路:

通过字典中key的唯一性进行汇总,即

字典d(key)=d(key)+销量

若key不存在,字典中增加新的关键字记录;

右key已存在,在原有item基础上加上新的销量。

2、单条件多列汇总,如求商品A的总销量和总金额。

思路:

每个要汇总的列做一个字典,如上列,声明两个字典

字典d1 key:=商品,item:=销量

字典d2 key:=商品,item:=金额

然后参照第1种情况单条件单列进行汇总

3、多条件单列汇总,如求业务员张三商品A的总销量。

思路:

将多条件连接成新的字符串作为关键字生成字典

将“业务员” & “商品名称”形成新的字符串作为key关键字生成字典

字典d key:=业务员 & 商品名称,item:=销量

然后参照第1种情况单条件单列进行汇总

4、多条件多列汇总。如求业务员张三商品A的总销量与总金额。

思路:

首先参照第3种情况多条件单列汇总的思路,将多条件连接成新的字符串作为关键字,这样就将第4种情况多条件多列汇总转化成了第2种情况单条件多列汇总。

字典d1 key:=业务员 & 商品名称,item:=销量

字典d2 key:=业务员 & 商品名称,item:=金额

然后参照第种情况单条件单列进行汇总

以下为实例说明

数据源表如下:

日期

商品名称

销量

单价

金额

业务员

5月1日

A

10

2

20

张三

5月1日

B

8

3.5

28

李四

5月1日

A

6

2

12

王五

5月2日

C

8

4

32

张三

5月2日

C

11

4

44

王五

5月2日

A

9

2

18

张三

5月3日

B

20

3.5

70

李四

5月3日

A

2

2

4

张三

5月3日

C

9

4

36

张三

一、、单条件单列汇总

如求5月1日~5月3日,商品A的总销量

VBA代码

Sub 单条件单列汇总()

Dim d As New Dictionary

Dim arr

Dim n As Integer, i As Integer

arr = Range("A2:F10")

n = UBound(arr, 1)

For i = 1 To n Step 1

d(arr(i, 2)) = d(arr(i, 2)) + arr(i, 3)

Next i

MsgBox "商品A总销量:" & d("A")

End Sub

二、单条件多列汇总

如求5月1日~5月3日,商品A的总销量和总金额

VBA代码

Sub 单条件多列汇总()

Dim d1 As New Dictionary, d2 As New Dictionary

Dim arr

Dim n As Integer, i As Integer

arr = Range("A2:F10")

n = UBound(arr, 1)

For i = 1 To n Step 1

d1(arr(i, 2)) = d1(arr(i, 2)) + arr(i, 3)

d2(arr(i, 2)) = d2(arr(i, 2)) + arr(i, 5)

Next i

MsgBox "商品A的总销量:" & d1("A") & Chr(10) & "商品A的总金额:" & d2("A")

End Sub

三、多条件单列汇总 (将相关条件连接成新的字符串,作为key)

如求5月1日~5月3日,业务员张三商品A的总销量

VBA代码

Sub 多条件单列汇总()

Dim d As New Dictionary

Dim arr

Dim i As Integer, n As Integer

n = Range("A1").CurrentRegion.Rows.Count - 1

ReDim arr(1 To n, 1 To 2)

For i = 1 To n Step 1

arr(i, 1) = "业务员" & Cells(i + 1, 6) & "商品" & Cells(i + 1, 2)

arr(i, 2) = Cells(i + 1, 3)

d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 2)

Next i

MsgBox "业务员张三商品A总销量:" & d("业务员张三商品A")

End Sub

四、多条件多列汇总

如求5月1日~5月3日,业务员张三商品A的总销量与总金额

VBA代码

Sub 多条件多列汇总()

Dim d1 As New Dictionary, d2 As New Dictionary

Dim i As Integer, n As Integer

Dim arr

n = Range("A1").CurrentRegion.Rows.Count - 1

ReDim arr(1 To n, 1 To 3)

For i = 1 To n Step 1

arr(i, 1) = "业务员" & Cells(i + 1, 6) & "商品" & Cells(i + 1, 2)

arr(i, 2) = Cells(i + 1, 3)

arr(i, 3) = Cells(i + 1, 5)

d1(arr(i, 1)) = d1(arr(i, 1)) + arr(i, 2)

d2(arr(i, 1)) = d2(arr(i, 1)) + arr(i, 3)

Next i

MsgBox "业务员张三商品A总销量:" & d1("业务员张三商品A") & Chr(10) & "业务员张三商品A总金额:" & d2("业务员张三商品A")

End Sub

VBA用字典实现分类汇总(一)相关推荐

  1. VBA用字典实现分类汇总(二)

    在VBA中,字典是一个很重要的概念,有点你我们生活中用到的字典,(你可以通过pinyin或部首,查找到某个字),VBA中的字典,可以根据一个关键字(key)查询一个值(item),且关键字(key)是 ...

  2. 20210112.使用字典来创建并分类汇总物品清单的python程序代码

    20210112.使用字典来创建并分类汇总物品清单的python程序代码 #这段代码使用字典来创建并分类汇总物品清单.为<python编程快速上手--让繁琐工作自动化>一书中的5.6.1实 ...

  3. excel按季度分类汇总_Excel数据透视不会,分类汇总来帮忙,强的不是一点,学会它,错不了...

    Excel数据透视不会,分类汇总来帮忙,强的不是一点,学会它,错不了 大家办公经常要用到Excel处理数据,想要对成千上万条数据做分类汇总,则需要做数据透视表和分类汇总功能:在数据量适中即小于万条时, ...

  4. Excel VBA 多条件筛选及汇总统计

    Excel VBA 多条件筛选 AdvancedFilter 汇总统计 sumproduct Range与Array交换 在日常工作中,面对Excel表格数据,为了分类进行统计,通过对表格数据筛选获取 ...

  5. sql查询语句_多字段分类汇总_多表合并

    一.最初(最简单的入门实例,单个分类汇总) 1,查询语句/*药品费用分科室汇总*/ select c.sksxx02,sum(nvl(b.nfyxx06,0))         from yygli6 ...

  6. python 数据分类汇总_Python 实现批量分类汇总并保存xlsx文件

    上一篇文件用VBA介绍了如何实现一键按列分类汇总并保存单独文件,代码有几十行,而且一旦数据量多了,效果可能不尽如人意. 文章可以参见这里: vba实例(27)-一键按列分类汇总并保存单独文件 今天就来 ...

  7. Excel 2010 VBA 入门 088 数据处理之汇总列数不相等的多个工作表

    目录 示例 代码1 合并汇总(Consolidate)方法 Array函数 Evaluate方法构造数组 代码2 示例 如图所示,该工作簿中有若干个工资表,由于每个月发放的工资项目不同,因而造成每个工 ...

  8. 总线控制内部eep_【上周回顾】小白如何自学单片机;电子专业的十个神总结;摩尔定律54年;电子工程师常弄混的总线分类汇总;他做成了半导体害怕他做的事...

    往期动态: 1.他60岁回国,做成了半导体行业都害怕他做成的事... 2.教你4招,小白如何自学单片机,绝对管用! 3.电子工程师常弄混的总线分类汇总,你中招了吗? 4.摩尔定律54年:他是如何在实验 ...

  9. csvtk:表格处理神器-美化、统计、头表、合并、转置、筛选、取样、去冗余 、分列、分类汇总和简单绘图...

    写在前面 CSV/TSV作为数据科学和组学分析的基本格式,其实本质上均为txt格式的表格,CSV是按逗号分隔,TSV是以制表符分隔的表格.这两种格式数据格式应用非常广泛.比较常用的处理软件包括: Ex ...

最新文章

  1. php封装pdo实例以及pdo长连接的优缺点
  2. 02 | 高性能 IO 模型:为什么单线程 Redis 能那么快?
  3. .NetCoreLinuxDockerPortainer踩坑历险记
  4. 载winpcap4.1.1_最常用的11个电缆载流量数据表,建议收藏备用
  5. Scrapy学习篇(三)之创建项目
  6. mysql事务操作代码_Mysql中事务的使用【mysql】
  7. html实现点击切换页面,JavaScript实现的简单Tab点击切换功能示例
  8. iOS开发中的火星坐标系及各种坐标系转换算法
  9. PDF文件转MOBI怎么转?在线操作轻松完成
  10. android手机给iphone越狱,在越狱的iPhone上安装Android 2.2教程
  11. win10杜比全景声评测_杜比全景声加持:Win10创意者更新空间音效设置扫盲
  12. 错觉图片生成实验 - 隐形的黑点
  13. 互联网摸鱼日报(2022-10-28)
  14. matlab求条件概率密度_你真的会用程序求多重积分吗?
  15. Java基础篇--IO
  16. URL编码和Base64编码
  17. 【软考】 2 网络安全
  18. gnome显示桌面图标_gnome tweak tool 不显示桌面图标,为什么
  19. PanDownload——卢本伟修订版,复活了!60MB/s!附下载地址
  20. MySQL5.7(Linux)创建表报错:“Row size too large (> 8126). Changing some columns to TEXT or BLOB may help.”

热门文章

  1. React中CodeMirror插件的使用及封装
  2. SpringBoot获取企业微信token
  3. 解决实际维护网络过程故障的五个盲点
  4. 文件服务器 架构,文件服务器架构规划
  5. 车易加:今日油价|油价上涨10元/吨,油价又要重新上涨?
  6. ubuntu中对于大小写锁定键的控制
  7. 打印机form2尺寸_注册您的Form 2打印机,享受更多福利!
  8. OpenWRT初次进入设置联网
  9. 计算机名更改后无法进入局域网,win10系统局域网计算机名称更改的恢复办法
  10. Linux 磁盘分区工具gdisk