ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 64195|回复: 93

[分享] 初学者对于VBA字典法的理解

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-6-5 08:47 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 f8b1987 于 2012-6-8 12:34 编辑
在引用工作表名称把单元格写入数组的话,定义数组不要使用dim arr()这种形式,使用dim arr即可。


接触了VBA字典法一段时间,虽然没有什么大的提升,总算对字典法有个初步的理解。


想当初,刚学的时候,可是问了很多幼稚的问题{:soso_e106:}。

对于字典法的含义解释,当然有EH VBA版主蓝桥玄霜的帖子:
http://club.excelhome.net/forum.php?mod=viewthread&tid=638154&extra=page%3D1%26filter%3Ddigest%26digest%3D1%26digest%3D1

版主的帖子说得挺不错的。但是,对于像我这种VBA学习水平不高且初学字典法的人,有很多地方还是有点难理解的。

在这里,我只作为一个菜鸟的理解,用菜鸟的语言对字典法进行基础解释。

我们看下面的代码:
  1. Sub 字典简要解释()
  2. Dim i As Integer, j As Integer, dic As Object, arr, brr
  3. '定义i、j,定义字典对象dic,定义动态数组arr、brr

  4.     Set dic = CreateObject("scripting.dictionary")
  5.     '固定用法,意为创建字典对象,这里的dic是变量,并非要求用dic。
  6.     brr = Sheet2.Range("a1").CurrentRegion
  7.     '单元格区域装入数组,查看范围可以选择A1单元格,按下CTRL+*即可选定该范围
  8.     arr = Sheet1.Range("a1").CurrentRegion
  9.    
  10.    
  11. For i = 2 To UBound(brr)
  12.         dic(brr(i, 1)) = brr(i, 2)
  13.         '字典(KEY)=item,意思是把brr(i,1)的值循环写入字典的key,并把brr(i,2)作为字典的item
  14.         'dic锁的集合体,有很多锁。好比是:锁头(钥匙)=打开锁的车子
  15.          
  16.         'Key = brr(i, 1)
  17.         
  18.         '理论上一条不同的钥匙只能打开一把锁,你能打开宝马的锁还是打开摩托车的锁,就取决于你的钥匙。
  19.         
  20.         'brr(i,2),字典中的item。我们用钥匙开了锁,自然可以选择进入安装该锁的对象,例如打开了宝马的锁可以进入宝马,打开了法拉利的锁自然可以开法拉利
  21.         
  22.     '如果brr(i,1)=宝马的钥匙,那么dic(brr(i,1))就是dic(宝马的钥匙),dic(宝马的钥匙)=打开锁的宝马。
  23. Next i
  24.    
  25. For j = 2 To UBound(arr)
  26.         arr(j, 2) = dic(arr(j, 1))
  27.         '我们令数组arr的第2列等于“打开了锁的对象”,'因为前面我们已经知道dic(宝马的钥匙)=打开锁的宝马,那么dic(arr(j, 1))开到的到底是宝马还是摩托,又或者法拉利,'就取决于打开dic的钥匙arr(j, 1)的值,j值相同,表示与arr(j, 2)同行的第1列的值。'示例,当j=2,arr(j,1)="A107",那么就是dic(arr(j,1))=dic("A107")打开的对象是对应的item值107
  28.         '数组arr(j,2)的结果就用值107替换了
  29.     Next j
  30.         Sheet1.Range("a1").Resize(UBound(arr), 2) = arr
  31.         '通过前面的arr(j,2)循环替换成字典的item,已经改变数组arr第2列的结果,我们把数组按高度UBound(arr)、宽度(2)“贴”回单元格内
  32. 'ubound是获取数组的“三围”(维)中的数据,ubound(arr)我们就是获得arr长得多高,ubound(arr,2)我们就是度量arr腰围是多大

  33. End Sub
复制代码
示例文件:
字典法初学注释.rar (9.38 KB, 下载次数: 4299)

其他例子
http://club.excelhome.net/thread-875397-1-1.html

评分

14

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-6-5 09:01 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-5 09:48 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
学习。谢谢

TA的精华主题

TA的得分主题

发表于 2012-6-5 09:52 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-6-6 09:56 | 显示全部楼层
非常谢谢楼主,通俗易懂,非常适合我这样半懂不懂的。

TA的精华主题

TA的得分主题

发表于 2012-6-8 08:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-25 16:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-27 11:11 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-29 23:14 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-7-30 09:46 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 20:14 , Processed in 0.043834 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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