EXCELVBA常见字典⽤法整编及代码详解(全)
常见字典⽤法集锦及代码详解
前⾔
凡是上过学校的⼈都使⽤过字典,从新华字典、成语词典,到英汉字典以及各种各样数不胜数的专业字典,字典是上学必备的、经常查阅的⼯具书。有了它们,我们可以很⽅便的通过查某个关键字,进⽽查到这个关键字的种种解释,⾮常快捷实⽤。
凡是上过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 对象中添加⼀个关键字项⽬对。
object.Add (key, item)
参数
object
必选项。总是⼀个Dictionary 对象的名称。
key
必选项。与被添加的item 相关联的key。
item
必选项。与被添加的key 相关联的item。
说明
如果key 已经存在,那么将导致⼀个错误。
常⽤语句:
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
代码详解
1、Dim d :创建变量,也称为声明变量。变量d声明为可变型数据类型(Variant),d后⾯没有写数据类型,默认就是可变型数据类型(Variant)。也有写成Dim
d As Object的,声明为对象。
2、Set d = CreateObject("Scripting.Dictionary"):创建字典对象,并把字典对象赋给变量d。这是最常⽤的⼀句代码。所谓的“后期绑定”。⽤了这句代码就不⽤先引⽤c:\windows\system32\scrrun.dll了。
resize函数c++3、d.Add "a", "Athens":添加⼀关键字”a”和对应于它的项”Athens”。
4、d.Add "b", “Belgrade”:添加⼀关键字”b”和对应于它的项”Belgrade”。
5、d.Add "c", “Cairo”:添加⼀关键字”c”和对应于它的项”Cairo”。
Exists⽅法
如果Dictionary 对象中存在所指定的关键字则返回true,否则返回false。
object.Exists(key)
参数
object
必选项。总是⼀个Dictionary 对象的名称。
key
必选项。需要在Dictionary 对象中搜索的key 值。
常⽤语句:
Dim d, msg$
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
If d.Exists("c") Then
msg = "指定的关键字已经存在。"
Else
msg = "指定的关键字不存在。"
End If
代码详解
1、Dim d, msg$ :声明变量,d见前例;msg$ 声明为字符串数据类型(String),⼀般写法为Dim msg As String。String的类型声明字符为美元号($)。
2、If d.Exists("c") Then:如果字典中存在关键字”c”,那么执⾏下⾯的语句。
3、msg = "指定的关键字已经存在。" :把"指定的关键字已经存在。"字符串赋给变量msg。
4、Else :否则执⾏下⾯的语句。
5、msg = "指定的关键字不存在。" :把"指定的关键字不存在。"字符串赋给变量msg。
6、End If :结束If …Else…Endif判断。
Keys⽅法
返回⼀个数组,其中包含了⼀个Dictionary 对象中的全部现有的关键字。
object.Keys( )
其中object 总是⼀个Dictionary 对象的名称。
常⽤语句:
Dim d, k
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
k=d.Keys
[B1].Resize(d.Count,1)=Application.Transpose(k)
代码详解
1、Dim d, k :声明变量,d见前例;k默认是可变型数据类型(Variant)。
2、k=d.Keys:把字典中存在的所有的关键字赋给变量k。得到的是⼀个⼀维数组,下限为0,上限为d.Count-1。这是数组的默认形式。
3、[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
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
t=d.Items
[C1].Resize(d.Count,1)=Application.Transpose(t)
代码详解
1、Dim d, t :声明变量,d见前例;t默认是可变型数据类型(Variant)。
2、t=d.Items :把字典中所有的关键字对应的项赋给变量t。得到的也是⼀个⼀维数组,下限为0,上限为d.Count-1。这是数组的默认形式。
3、[C1].Resize(d.Count,1)=Application.Transpose(t) :有了上⾯Keys⽅法的解释这句代码就不⽤多说了,就是把字典中所有的关键字对应的项赋给以C1单元格开
始的单元格区域中。
Remove⽅法
Remove ⽅法从⼀个Dictionary 对象中清除⼀个关键字,项⽬对。
object.Remove(key )
其中object 总是⼀个Dictionary 对象的名称。
key
必选项。key 与要从Dictionary 对象中删除的关键字,项⽬对相关联。
说明
如果所指定的关键字,项⽬对不存在,那么将导致⼀个错误。
常⽤语句:
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
……
d.Remove(“b”)
代码详解
1、d.Remove(“b”):清除字典中”b”关键字和与它对应的项。清除之后,现在字典⾥只有2个关键字了。
RemoveAll⽅法
RemoveAll ⽅法从⼀个Dictionary 对象中清除所有的关键字,项⽬对。
object.RemoveAll( )
其中object 总是⼀个Dictionary 对象的名称。
常⽤语句:
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
……
d.RemoveAll
代码详解
1、d.RemoveAll:清除字典中所有的数据。也就是清空这字典,然后可以添加新的关键字和项,形成⼀本新字典。
字典对象的属性有4个:Count属性、Key属性、Item属性、CompareMode 属性。
Count属性
返回⼀个Dictionary 对象中的项⽬数。只读属性。
object.Count
其中object⼀个字典对象的名称。
常⽤语句:
Dim d,n%
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
n = d.Count
代码详解
1、Dim d, n% :声明变量,d见前例;n被声明为整型数据类型(Integer)。⼀般写法为Dim n As Integer 。Integer的类型声明字符为百分⽐号(%)。
2、n = d.Count :把字典中所有的关键字的数量赋给变量n。本例得到的是3。
Key属性
在Dictionary 对象中设置⼀个key。
object.Key(key) = newkey
参数:
object
必选项。总是⼀个字典(Dictionary) 对象的名称。
key