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

在VBA中,字典是一个很重要的概念,有点你我们生活中用到的字典,(你可以通过pinyin或部首,查找到某个字),VBA中的字典,可以根据一个关键字(key)查询一个值(item),且关键字(key)是唯一的,不能重复,但是值(item)可以重复。利用字典这一特性唯一关键字---值的特性,可以快速进行分类汇总。

上一篇,讲了VBA中运用字典进行分类汇总的四种情况

1)单条件单列汇总

2)单条件多列汇总

3)多条件单列汇总

4)多条件多列汇总

但是前面这四种都是针对单一对象(如商品A或业务员张三商品A)进行的汇总,如果要做一个多个对象的汇总表,该如何做呢。比如,已知原始表见下方

表1:原始表:

产品

月份

费用

A

1

10

B

1

20

C

1

1000

A

1

10

B

1

200

C

2

309

D

2

24

E

2

34

A

2

33

B

2

12

C

2

3000

D

3

20

A

3

50000

C

3

2

E

3

34

A

3

800

D

3

30

A

4

10

B

4

20

C

4

1000

A

4

10

B

5

200

C

5

309

D

5

24

E

5

34

A

5

33

B

5

12

C

6

3000

D

6

20

A

6

50000

C

6

2

E

6

34

A

6

800

D

6

30

要求,根据上表(表1)数据做成如下格式的表2:分类汇总表

产品

1

2

3

4

5

6

合计

A

 

 

 

 

 

 

 

B

 

 

 

 

 

 

 

C

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

E

 

 

 

 

 

 

 

分析思路:

表1原始表显然属于一维表,表2分类汇总表属于二维表。由表2可知需要汇总数据的关键字(key)为“产品“+”月份“ 或 “产品”+“合计”,这样的话,我们只需要在字典中将关键字(key)设置为“产品”+“月份” 或 “产品”+“合计”,如“A” & “-” & “1月”,“A” & “-” & “合计”。然后根据表2分类汇总表中的列标和行标确定关键字(key),如“A” & “-‘ & ”1月“,相对坐标为(2,2),将字典中key对应的值item,填入相应的位置(相对坐标(2,2)即可。

VBA代码如下:

Sub tt()

Dim arr, arr1

Dim d As New Dictionary

Dim n As Integer, i As Integer, j As Integer, st As String

Dim rg As Range

Dim r As Integer, c As Integer

n = Range("A65536").End(xlUp).Row

arr = Range(Cells(2, 1), Cells(n, 3))

For i = 1 To n - 1 Step 1

    st = arr(i, 1) & "-" & arr(i, 2)

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

        st = arr(i, 1) & "-" & "合计"

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

    Next i

Set rg = Range("F1")

r = rg.CurrentRegion.Rows.Count

c = rg.CurrentRegion.Columns.Count

For i = 2 To r Step 1

    For j = 2 To c Step 1

            st = rg.Offset(i - 1, 0) & "-" & rg.Offset(0, j - 1)

            rg.Offset(i - 1, j - 1) = d(st)

            Next j

    Next i

End Sub

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
EXCEL万能百宝箱是著名微软办公软件EXCEL(Microsoft Office for EXCEL)增强型插件。包括230个菜单功能和100个左右自定义函数,集330个宝贝于一身,但体积小于12MB。当安装万能百宝箱后,如果您使用Excel 2003,则将产生【万能百宝箱】菜单,包括230多个子菜单;如果您使用Excel 2013或者2010,将产生【经典】与【万能百宝箱】功能区。根据各功能的特点,对子菜单作了18个分类, 而在函数向导对话框中也新增100个左右新的函数,用于扩展Excel的基本功能。且所有功能都通用于Excel 2003、2007和2010、2013。支持中英文显示与繁简体操作系统、拥有30多款华丽的皮肤界面,支持Excel2010全面隐藏选项卡,这个插件还前承了Excel2003经典样式菜单,目的是方便那些从Excel2003转向使用2010或2013版的朋友熟练使用。兼并了ExcelTabs工作薄多标签插件,方便在不同工作薄中切换与使用。跨工作薄存储格逐步提示输入功能让你录入数据更轻松。图片批量尺寸及导入多列图片具备16项可设置参数,多达50种组合导入方式,满足各行业不同需求的图片导入导出与规范排版。表达式计算精灵让数学函数及复杂公式表达式全自动计算一切变得那么轻巧与高效,且能与EXCEL智能交互操作。工程解密功能可以解除VBA工程不可查看的EXCEL工程文档,解除后重新打开文档可100%准确还原源代码,是VBA开发者的必备利器。采用字典补码查漏纠错技术实现台湾繁体系统中繁简转换与GB2BIG5转换准确率达100%,达到微软同效功能。更内置了比Vlookup()函数更强大且好用的VlookupIn()函数。能对VBA宏程式实现撤销与还原操作,防止鼠标误点功能与误操作。由全球顶尖级水平微软MVP专家与财会管理信息团队历时多年开发,是与EXCEL用户与爱好者共同努力的结晶,被誉为"全能的办公瑞士军刀"。 安装不成功原因分析: 对于无法安装的朋友请注意以下6点 : 一:必须是完整版OFFICE,不能是绿色版、精简版,它们不支持COM加载宏.   :必须关闭Excel状态下安装或者删除工具,安装后重启Excel即可.   三:如果是VISTA或WIN 7,必须以管理员用户安装,且从控制面板中关掉用户帐户控制(UAC)功能.   四:如果您装了其它的EXCEL工具,请先关掉它,它们有可能删除本工具的菜单.   五:不要使用除系统之外的皮肤包桌面主题显示,如果安装了请先卸载掉,以免影响工具正常显示. 六: 如果XP系统 管理员权限 32位Office个别版本不能自动加载工具箱菜单的: Office按钮--》Excel选项--》Excel加载项--》Com加载项--》转到按钮--》添加安装目录中的ExcelTools.Dll文件并确认即可. EXCEL万能百宝箱截图
VBA字典可以用来实现级菜单功能,通过在字典中嵌套另一个字典实现。 首先,我们可以创建一个主菜单的字典,其中键代表主菜单的选项,值代表对应的子菜单的字典。例如: ``` Dim menu As Object Set menu = CreateObject("Scripting.Dictionary") menu.Add "文件", CreateObject("Scripting.Dictionary") menu("文件").Add "新建", "New" menu("文件").Add "打开", "Open" menu.Add "编辑", CreateObject("Scripting.Dictionary") menu("编辑").Add "复制", "Copy" menu("编辑").Add "剪切", "Cut" ``` 然后,我们可以通过循环遍历主菜单的字典,让用户选择主菜单的选项,并显示对应的子菜单选项。例如: ``` Dim choice As String Dim subChoice As String For Each key In menu.Keys Debug.Print key Next key choice = InputBox("请输入主菜单选项:") If menu.Exists(choice) Then For Each subKey In menu(choice).Keys Debug.Print subKey Next subKey subChoice = InputBox("请输入子菜单选项:") '根据用户选择的子菜单选项执行相应的操作 If menu(choice).Exists(subChoice) Then Select Case menu(choice)(subChoice) Case "New" '执行新建操作 Case "Open" '执行打开操作 Case "Copy" '执行复制操作 Case "Cut" '执行剪切操作 End Select Else MsgBox "无效的子菜单选项" End If Else MsgBox "无效的主菜单选项" End If ``` 通过上面的代码,我们就可以通过VBA字典实现级菜单功能,让用户可以方便地选择主菜单和子菜单的选项,并执行对应的操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小崔2022

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

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

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

打赏作者

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

抵扣说明:

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

余额充值