字典对象的方法有 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"
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
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)
Resize 是 Range 对象的一个属性,用于调整指定区域的大小,它有两个参数,第
一个是行数,本例是 d.Count ,指的是字典中关键字的数量,整本字典中有多少个关键
字,本例 d.Count=3 ,因为有3 个关键字。
=右边的 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)
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”)
5
代码详解
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
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
必选项。被改变的 key 值。
newkey
必选项。替换所指定的 key 的新值。
说明
如果在改变一个 key 时没有发现该 key,那么将创建一个新的key 并且其相关联7
的 item 被设置为空。
常用语句:
Dim d
Set d =CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
d.Key("c") = "d"
代码详解
1、d.Key("c") = "d" :用新的关键字 ”d”来替换指定的关键字 ”c”,这时,字典中就
没有关键字 c 了,只有关键字 d 了,与 d 对应的项是 ”Cairo”。
Item 属性
在一个 Dictionary 对象中设置或者返回所指定 key 的 item。对于集合则根据所
指定的 key 返回一个 item。读 /写。
object.Item(key)[ = newitem]
参数
object
必选项。总是一个 Dictionary 对象的名称。
key
必选项。与要被查找或添加的 item 相关联的 key。
newitem
可选项。仅适用于 Dictionary 对象; newitem 就是与所指定的 key 相关联的新
值。
说明
如果在改变一个 key 的时候没有找到该 item,那么将利用所指定的newitem 创
建一个新的 key。如果在试图返回一个已有项目的时候没有找到 key,那么将创建一个
新的 key 且其相关的项目被设置为空。
常用语句:
Dim d
Set d = CreateObject("Scripting.Dictionary")
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
MsgBox d.Item("c")
代码详解
1、d.Item("c") :获取指定的关键字 ”c”对应的项。
2、 MsgBox :是一个 VBA 函数,用消息框显示。如果要详细了解 MsgBox 函数 的 , 可 参 见 我 的 另 一 篇 文 章 “ 常用 VBA 函 数 精 选 合 集 ”。
http://club.excelhome.net/thread-387253-1-1.html
CompareMode 属性
设置或者返回在 Dictionary 对象中进行字符串关键字比较时所使用的比较模式。
object.CompareMode[ = compare]
参数
object
必选项。总是一个 Dictionary 对象的名称。
compare
可选项。如果提供了此项, compare 就是一个代表比较模式的值。可以使用的值
是 0 (二进制 )、1 (文本 ), 2 (数据库 )。
说明
如果试图改变一个已经包含有数据的 Dictionary 对象的比较模式,那么将导致一
个错误。
常用语句:
Dim d
Set d =CreateObject("Scripting.Dictionary")
d.CompareMode = vbTextCompare
d.Add "a", "Athens"
d.Add "b", "Belgrade"
d.Add "c", "Cairo"
d.Add " B ", "Baltimore"
9
表格中人员有很多是重复的,要求编写一段代码,把重复的人员姓名以及重复的次
数求出来,复制到另一个表格中。
如图实例 1-1 所示。
论坛网址:http://club.excelhome.net/thread-637004-1-1.html
图 实例 1-1
二、代码 :
Sub cfz()
Dim i&, Myr&, Arr
Dim d, k, t
Set d = CreateObject("Scripting.Dictionary")
Myr = Sheet1.[a65536].End(xlUp).Row
Arr = Sheet1.Range("a1:g" & Myr)
For i = 2 To UBound(Arr)
d(Arr(i, 3)) = d(Arr(i, 3)) + 1
Next k = d.keys
t = d.items
Sheet2.Activate
[a2].Resize(d.Count, 1) = Application.Transpose(k)
[b2].Resize(d.Count, 1) = Application.Transpose(t)
[a1].Resize(1, 2) = Array(" 姓名 ", "重复个数 ")
Set d = Nothing
End Sub