常见字典用法集锦及代码详解蓝桥玄霜常见字典用法集锦及代码详解2 前言凡是上过学校的人都使用过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的工具书。
有了它们,我们可以很方便的通过查找某个关键字,进而查到这个关键字的种种解释,非常快捷实用。
凡是上过EH 论坛的想学习VBA 里面字典用法的,几乎都看过研究过northwolves 狼版主、oobird 版主的有关字典的精华贴和经典代码。
我也是从这里接触到和学习到字典的,在此,对他们表示深深的谢意,同时也对很多把字典用得出神入化的高手们致敬,从他们那里我们也学到了很多,也得到了提高。
字典对象只有4个属性和6个方法,相对其它的对象要简洁得多,而且容易理解使用方便,功能强大,运行速度非常快,效率极高。
深受大家的喜爱。
本文希望通过对一些字典应用的典型实例的代码的详细解释来给初次接触字典和想要进一步了解字典用法的朋友提供一点备查的参考资料,希望大家能喜欢。
给代码注释估计是大家都怕做的,因为往往是出力不讨好的,稍不留神或者自己确实理解得不对,还会贻误他人。
所以下面的这些注释如果有不对或者不妥当的地方,请大家跟帖时指正批评,及时改正。
字典的简介字典(Dictionary )对象是微软Windows 脚本语言中的一个很有用的对象。
附带提一下,有名的正则表达式(RegExp )对象和能方便处理驱动器、文件夹和文件的(FileSystemObject )对象也是微软Windows 脚本语言中的一份子。
字典对象相当于一种联合数组,它是由具有唯一性的关键字(Key )和它的项(Item )联合组成。
就好像一本字典书一样,是由很多生字和对它们对应的注解所组成。
比如字典的“典”字的解释是这样的:“典”字就是具有唯一性的关键字,后面的解释就是它的项,和“典”字联合组成一对数据。
常用关键字英汉对照:Dictionary 字典Key 关键字Item 项,或者译为 条目字典对象的方法有6个:Add 方法、Keys 方法、Items 方法、Exists 方法、Remove 方法、RemoveAll 方法。
Add 方法向 Dictionary 对象中添加一个关键字项目对。
字典的简介3 object.Add (key, item)参数object必选项。
总是一个 Dictionary 对象的名称。
key必选项。
与被添加的 item 相关联的 key 。
item必选项。
与被添加的 key 相关联的 item 。
说明如果 key 已经存在,那么将导致一个错误。
常用语句: Dim d As Objec 【声明为对象】Set d = CreateObject("Scripting.Dictionary") 【创建字典对象,并把字典对象赋给变量d 。
】d.Add "a", "Athens" 【添加一关键字”a ”和对应于它的项”Athens ”。
】d.Add "b", "Belgrade" 【添加一关键字”b ”和对应于它的项”Belgrade ”。
】d.Add "c", "Cairo" 【添加一关键字”c ”和对应于它的项”Cairo ”。
】Exists 方法如果 Dictionary 对象中存在所指定的关键字则返回 true ,否则返回 false 。
object.Exists(key)参数object必选项。
总是一个 Dictionary 对象的名称。
key必选项。
需要在 Dictionary 对象中搜索的 key 值。
常用语句: Dim d As Objec 【声明为对象】Dim msg$ 【声明为字符串数据类型(String),一般写法为Dim msg As String 】Set d = CreateObject("Scripting.Dictionary") 【创建字典对象,并把字典对象赋给变量d 。
】d.Add "a", "Athens"d.Add "b", "Belgrade" d.Add "c", "Cairo"If d.Exists("c") Then 【如果字典中存在关键字”c ”,那么执行下面的语句。
】msg = "指定的关键字已经存在。
" 【把"指定的关键字已经存在。
"字符串赋给变量msg 。
】 Else 【否则执行下面的语句。
】msg = "指定的关键字不存在。
"【把"指定的关键字不存在。
"字符串赋给变量msg 。
】End If 【结束If …Else …Endif 判断。
】Keys 方法返回一个数组,其中包含了一个 Dictionary 对象中的全部现有的关键字。
object.Keys( )其中 object 总是一个 Dictionary 对象的名称。
常见字典用法集锦及代码详解4 常用语句:Dim d, k 【声明变量,d见前例;k默认是可变型数据类型(Variant)。
】Set d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens"d.Add "b", "Belgrade"d.Add "c", "Cairo"k=d.Keys 【把字典中存在的所有的关键字赋给变量k。
得到的是一个一维数组,下限为0,上限为d.Count-1。
这是数组的默认形式。
】[B1].Resize(d.Count,1)=Application.Transpose(k)【这句代码是很常用很经典的代码,所以这里要多说一些。
】Resize是Range对象的一个属性,用于调整指定区域的大小,它有两个参数,第一个是行数,本例是d.Count,指的是字典中关键字的数量,整本字典中有多少个关键字,本例d.Count=3,因为有3个关键字。
呵呵,是不是说多了。
第二个是列数,本例是1。
这样=左边的意思就是:把一个单元格B1调整为以B1开始的一列单元格区域,行数等于字典中关键字的数量d.Count,就是把单元格B1调整为单元格区域B1:B3了。
=右边的k是个一维数组,是水平排列的,我们知道Excel工作表函数里面有个转置函数Transpose,用它可以把水平排列的置换成竖向排列。
但是在VBA中不能直接使用该工作表函数,需要通过Application对象的WorksheetFunction属性来使用它。
所以完整的写法是Application. WorksheetFunction.Transpose(k),中间的WorksheetFunction可省略。
现在可以解释这句代码了:把字典中所有的关键字赋给以B1单元格开始的单元格区域中。
Items方法返回一个数组,其中包含了一个Dictionary 对象中的所有项目。
object.Items( )其中object 总是一个Dictionary 对象的名称。
常用语句:Dim d, t 【声明变量,d见前例;t默认是可变型数据类型(Variant)。
】Set d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens"d.Add "b", "Belgrade"d.Add "c", "Cairo"t=d.Items 【把字典中所有的关键字对应的项赋给变量t。
得到的也是一个一维数组,下限为0,上限为d.Count-1。
这是数组的默认形式。
】[C1].Resize(d.Count,1)=Application.Transpose(t) 【把字典中所有的关键字对应的项赋给以C1单元格开始的单元格区域中。
】Remove方法Remove 方法从一个Dictionary 对象中清除一个关键字,项目对。
object.Remove(key )其中object 总是一个Dictionary 对象的名称。
key必选项。
key 与要从Dictionary 对象中删除的关键字,项目对相关联。
说明如果所指定的关键字,项目对不存在,那么将导致一个错误。
字典的简介5 常用语句: Dim d Set d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens" d.Add "b", "Belgrade"d.Add "c", "Cairo" ……d.Remove(“b ”) 【清除字典中”b ”关键字和与它对应的项。
清除之后,现在字典里只有2个关键字了。
】RemoveAll 方法RemoveAll 方法从一个 Dictionary 对象中清除所有的关键字,项目对。
object.RemoveAll( )其中 object 总是一个 Dictionary 对象的名称。
常用语句:Dim dSet d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens"d.Add "b", "Belgrade" d.Add "c", "Cairo"……d.RemoveAll 【清除字典中所有的数据。
也就是清空这字典,然后可以添加新的关键字和项,形成一本新字典。
】字典对象的属性有4个:Count 属性、Key 属性、Item 属性、CompareMode 属性。
Count 属性返回一个Dictionary 对象中的项目数。
只读属性。
object.Count其中 object 一个字典对象的名称。
常用语句: Dim d,n% 【声明变量,d 见前例;n 被声明为整型数据类型(Integer)。
】Set d = CreateObject("Scripting.Dictionary")d.Add "a", "Athens"d.Add "b", "Belgrade"d.Add "c", "Cairo"n = d.Count 【把字典中所有的关键字的数量赋给变量n 。