ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 山菊花

正松舒,慢匀稳——太极字典少年班

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-27 16:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖已被收录到知识树中,索引项:数组集合和字典
先下载了,没来得及学习。
以前有蓝桥玄霜版主的字典教程,很好的,只是我学得不够,现在再学习山版主的字典,预祝自己更进步!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-30 09:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
在和弦处等你 发表于 2012-7-27 13:32
请问表单28,解法3中,图中红色方框处为什么不能用原来前两种中的语句:谢谢答复。
  1. Sub 第三次练习2()
  2.     Dim dic, Arr(), Brr(), Crr(), m%, n%
  3.     Set dic = CreateObject("Scripting.dictionary")    '创建一个字典对象
  4.     Arr = Sheet25.Range("l1").CurrentRegion '把4月份销售统计表数据存储到数组Arr
  5.     Brr = Sheet25.Range("q1").CurrentRegion '把5月份销售记录数据存储到数组Brr
  6.     Range("a4:d100").ClearContents '清空当前工作表中单元格区域
  7.    
  8.    
  9.     '把4月份销售"名称 & 规格"添加到字典 dic 中,设置对应的Item为一负值。
  10.     For i = 4 To UBound(Arr)
  11.         dic.Add Arr(i, 1) & Arr(i, 2), -1
  12.     Next
  13.    
  14.    
  15.     For i = 4 To UBound(Brr) '循环读取5月份数据
  16.         If dic.exists(Brr(i, 2) & Brr(i, 3)) Then
  17.             n = dic(Brr(i, 2) & Brr(i, 3)) '查字典,读取序号
  18.         Else
  19.             m = m + 1
  20.             dic.Add Brr(i, 2) & Brr(i, 3), m
  21.             ReDim Preserve Crr(1 To 4, 1 To m)
  22.             Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
  23.             Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
  24.             n = m
  25.         End If
  26.         
  27.         If n > -1 Then '判断返回的序号是否大于-1,如果大于-1,表示4月份数据表中不存在该 名称 & 规格 。则:
  28.             Crr(3, n) = Crr(3, n) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
  29.             Crr(4, n) = Crr(4, n) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
  30.         End If
  31.     Next
  32.    
  33.     Range("a4").Resize(m, 4).Value = WorksheetFunction.Transpose(Crr)
  34. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-30 09:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
把负值改为0:

  1. Sub 第三次练习3()
  2.     Dim dic, Arr(), Brr(), Crr(), m%, n%
  3.     Set dic = CreateObject("Scripting.dictionary")    '创建一个字典对象
  4.     Arr = Sheet25.Range("l1").CurrentRegion '把4月份销售统计表数据存储到数组Arr
  5.     Brr = Sheet25.Range("q1").CurrentRegion '把5月份销售记录数据存储到数组Brr
  6.     Range("a4:d100").ClearContents '清空当前工作表中单元格区域
  7.    
  8.    
  9.     '把4月份销售"名称 & 规格"添加到字典 dic 中,设置对应的Item为0。
  10.     For i = 4 To UBound(Arr)
  11.         dic.Add Arr(i, 1) & Arr(i, 2), 0
  12.     Next
  13.    
  14.    
  15.     For i = 4 To UBound(Brr) '循环读取5月份数据
  16.         If dic.exists(Brr(i, 2) & Brr(i, 3)) Then
  17.             n = dic(Brr(i, 2) & Brr(i, 3)) '查字典,读取序号
  18.         Else
  19.             m = m + 1
  20.             dic.Add Brr(i, 2) & Brr(i, 3), m
  21.             ReDim Preserve Crr(1 To 4, 1 To m)
  22.             Crr(1, m) = Brr(i, 2) '将名称存储到数组Crr()第1行
  23.             Crr(2, m) = Brr(i, 3) '将规格存储到数组Crr第2行
  24.             n = m
  25.         End If
  26.         
  27.         If n > 0 Then '判断返回的序号是否大于-1,如果大于0,表示4月份数据表中不存在该 名称 & 规格 。则:
  28.             Crr(3, n) = Crr(3, n) + Brr(i, 4) '汇总数量,保存到数组Crr第3行
  29.             Crr(4, n) = Crr(4, n) + Brr(i, 5) '汇总金额,保存到数组Crr第4行
  30.         End If
  31.     Next
  32.    
  33.     Range("a4").Resize(m, 4).Value = WorksheetFunction.Transpose(Crr)
  34. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-7-30 12:53 | 显示全部楼层
在调试过程中也稍微思考了下为什么不能用
  1. dic1.Add Brr(i, 2) & Brr(i, 3), m
复制代码
的可能原因:
在运行完该语句后:
  1. n = dic1(Brr(i, 2) & Brr(i, 3))
复制代码
字典就将要查询的内容设为关键字,而后运行语句
  1. dic1.Add Brr(i, 2) & Brr(i, 3), m
复制代码
时,就会报错(关键字已存在)
请看图:
VBA字典提问6.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-30 17:31 | 显示全部楼层
当字典中不存在关键字时,下面的语句会自动为字典添加该关键字。
n = dic1(Brr(i, 2) & Brr(i, 3))
相当于:
dic1.Add Brr(i, 2) & Brr(i, 3), ""
如果再次执行:
dic1.Add Brr(i, 2) & Brr(i, 3), m
它就会提示错误。





TA的精华主题

TA的得分主题

发表于 2012-8-1 09:18 | 显示全部楼层
山菊花老师可是我的启蒙老师啊,虽然你不认识我,我却看着你的贴子入的门!

点评

你我互不认识,但彼此并不陌生。为了共同的爱好结缘EH,日久天长,伴随技术的进步,收获着点点滴滴的感动。我们珍爱它,但不必守着它,把每一份感动当成种子,洒向EH,让它在更多人心中发芽、开花。  发表于 2012-8-1 19:00

TA的精华主题

TA的得分主题

发表于 2012-8-1 10:55 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
感谢!下下来学习学习

TA的精华主题

TA的得分主题

发表于 2012-8-15 11:45 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-8-16 16:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Good info.Thank you very much,my teacher.

TA的精华主题

TA的得分主题

发表于 2012-8-19 15:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
心血之作,心服口服,大爱大赞。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 09:39 , Processed in 0.036771 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表