标签:VBA,Dictionary
Excel中的字典(Dictionary)对大多数人来说都是个谜,即使是有些很熟悉VBA的人,可能对其都还不了解。其实,字典是一个很好的工具,运行快速,可以执行一些很好的计算。
字典的工作原理与普通字典相同,一个单词不会以相同的拼写输入两次。在字典中,键(key)是唯一的标识符,用于标记字典中的条目。只有唯一的键才能输入字典,这就打开了奇妙的可能性。字典可以快速存储和合并数据,其结果可以输出到任何地方并实时更新。
与字典相关的方法
Add方法
添加新的键/项目对到Dictionary对象。
Exists方法
返回布尔值,表明键是否存在于Dictionary对象中。
Items方法
返回Dictionary对象中所有项目的数组。
Keys方法
返回Dictionary对象中所有键的数组。
Remove方法
从Dictionary对象中移除指定的键/项目对。
RemoveAll方法
从Dictionary对象中移除所有的键/项目对。
放入数据到字典
以下是将项目放入字典的方法。基本字典条目分为两部分:
键(Key)——为Dictionary对象中的现有键值设置新键值。
项目(Item)——设置或返回Dictionary对象中项目的值。
因此,字典中的一个典型条目如下所示:
“Key 1”,”Item 1”
Key 1为唯一键,Item 1为其关联项。对于初学者来说,令人困惑的是,该项在引用区域时获取键的值,这通常是通过数组对象完成的。然而,为了简化这个过程,这里将通过添加一个键和一个项目展示它是如何在一个非常基本的级别上工作的。
Add方法的使用
使用.Add方法可以同时添加键和相对应的项目。这可以通过以下方式完成:
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "Key1", "i1"
d.Add "Key2", "i2"
d.Add "Key3", "i3"
End Sub
可以通过Debug.Print在立即窗口中打印出键/项目值对,代码如下:
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "Key1", "i1"
d.Add "Key2", "i2"
d.Add "Key3", "i3"
Debug.Print d.keys()(0), d.items()(0)
Debug.Print d.keys()(1), d.items()(1)
Debug.Print d.keys()(2), d.items()(2)
End Sub
在立即窗口中的输出如下图1所示。键值在左侧,项目值在右侧。
图1
引用“Microsoft Scripting Runtime”库
要充分利用字典,最好在VBA的“引用”菜单中添加对“Microsoft Scripting Runtime”的引用。这将使你能够完全访问智能提示(IntelliSense),并允许查看可用的对象。
要添加“Microsoft Scripting Runtime”,在VBE中单击菜单“工具——引用”,在“引用”对话框中找到并勾选“Microsoft Scripting Runtime”前的复选框,如下图2所示。
图2
统计字典中的项目数量
要统计字典中的项目数,使用下面的方法:
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "Key1", "i1"
d.Add "Key2", "i2"
d.Add "Key3", "i3"
MsgBox d.Count
End Sub
上面的代码将给出字典中的项目总数。
从字典中移除项目
删除字典中的项目非常简单,只需引用字典和要删除的项目,如下面的代码:
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "Key1", "i1"
d.Add "Key2", "i2"
d.Add "Key3", "i3"
d.Remove "Key1"
MsgBox d.Count
End Sub
从字典中移除所有项目
删除字典中的所有项都比删除其中的一项容易,只需引用字典本身并调用RemoveAll命令。下面的代码将删除所有内容:
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "Key1", "i1"
d.Add "Key2", "i2"
d.Add "Key3", "i3"
d.RemoveAll
MsgBox d.Count
End Sub
比较字典中的项目
如上所述,字典接受唯一键。
KEy1 and Key1
不相同,因此将为每个创建唯一键。
Sub ScriptKey()
Dim d As Variant
Set d = CreateObject("Scripting.dictionary")
d.Add "KEy1", "i1"
d.Add "Key2", "i2"
End Sub
使用上述方法添加新键。
如果不想这样,使用比较模式可以使大写的名称与小写文本相同。下面的代码将修复比较问题:
Sub ScriptComp()
Dim d As New Dictionary
Set d = CreateObject("Scripting.dictionary")
d.CompareMode = TextCompare
d.Add "KEy1", "i1"
d.Add "Key1", "i2"
End Sub
会发生错误,如下图3所示。
图3
这是对Excel中字典的基本介绍,没有涉及到其全部强大的功能,但它确实是VBA内部一个令人惊叹且值得研究的工具。
注:本文学习整理自thesmallman.com,供有兴趣的朋友参考。