VBA编程技巧 之 字典对象使用经验谈.doc

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VBA编程技巧 之 字典对象使用经验谈

VBA编程技巧 之 字典对象使用经验谈(更新至四之一) 字典对象使用经验谈 目录 前言_______________________________________01 楼 一、字典的基本功能___________________________01 楼 二、The Hardcore of Dictionary__________________02 楼 二之一、多层字典对象应用案例分析 1 _____________16 楼 二之二、多层字典对象应用案例分析 2 _____________30 楼 三之一、动态的树形数据结构的构建________________35 楼 三之二、动态树形结构的遍历____________________54 楼 三之三、送你把漂亮的解牛小刀___________________64 楼 三之四、上帝的归上帝,凯撒的归凯撒______________66 楼 四之一、利用字典动态的构建自定义数据类型___________68 楼 前言 相信大家对字典对象已经是耳熟能详了。现在帮人写个代码如果不来个字典,出门都不好意思和人打招呼。EH里也有大量的帖子详尽的介绍了字典对象的功能和各种使用方法,我大致翻过这些帖子,感觉很有必要和大家交流一下最近一段时间泡坛子、帮人家写代码得到的一些心得体会。可能更多的会聊一些编程思路的东西,所以我想这篇文章应该是给有一定基础的朋友看的,起码应该能不需要注释就能看懂代码,起码应该看过置顶贴里提到的那些帖子。 一、字典的基本功能 ? ? 相信字典对象最为出名的是它的关键字不重复特性,我们经常会看到这样的语句: For i=0 to UBound(arr) ? ? dic(arr(i,1))= Next 这段语句唯一的作用就是将数组的第一列数据去掉了重复项。但值得强调的是既然我们叫它字典对象,那么它就理所应当的具有翻译功能。 以一个典型的EXCEL数据表为例,很多情况下会是类似于一个数据库中 表 这样的一个结构,即具有第一行的表头部分定义了每一列的内容是什么,其下每一行都是一条单独的纪录。那么这种情况下,我们完全可以用字典对象来创建由表头来翻译索引列号。这至少带来两个好处,1、使得你的代码更具有可看性,或则说更像自然语言;2、使得你的代码不会依赖于表格的地理位置,也就是说即便出于某种原因列的顺序有了变动,你也不需要去找出你的代码里涉及到相应列号并逐一改正。其实,更重要的一点,是你的代码会具有更大的适用性。 让我们来比较两段代码,设想我们需要读取一个月工资表并统计各班组的绩效奖金,其包含 姓名、班组、工位、基本工资、绩效奖金等等信息,那么可能的代码会是这样的: 复制内容到剪贴板 代码: Dim dic, arr, i, lRow lRow = Sheet1.[a65536].End(xlUp).Row arr = Sheet1.Range(a2:e lRow) Set dic = CreateObject(Scripting.Dictionary) For i = 1 To UBound(arr) ? ? dic(arr(i, 2)) = dic(arr(i, 2)) + dic(arr(i, 5)) Next ================= Dim dTitle, arr, i, dic arr = Sheet1.[a1].CurrentRegion Set dTitle = CreateObject(Scripting.Dictionary) For i = 1 To UBound(arr, 2) ? ? dTitle(arr(1, i)) = i Next Set dic = CreateObject(Scripting.Dictionary) For i = 2 To UBound(arr) ? ? dic(arr(i, dTitle(班组))) = dic(arr(i, dTitle(班组))) + arr(i, dTitle(绩效奖金)) Next 第二段代码我们使用了一个名为dTitle的字典对象来记录表头名称和对应列号,这样当我们需要使用某列数据的时候,我们可以使用这个对象来将表头名翻译成列号。很明显的是第一段代码完全依赖于表格内容的地理位置,而且如果不去看数据表的话,你根本不知道它在干什么。而相应的,对于第二段代码而言,我们完全可以不用去了解数据表是什么样的,只需要知道它有这样的两个表头就可以了。并且你不觉得它很接近自然语言了吗?哦,不吗,你确定?那我再稍微改一下: 复制内容到剪贴板 代码: 数据 = Sheet1.[a1].CurrentRegion Set 表头之列号 = CreateObject(Scripting.Dictio

文档评论(0)

wuyuetian + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档