Excel VBA 编程基础 -- 结构化数据类型(八)- 字典
- 2026-11-05 14:20:58
Excel VBA 编程基础 -- 结构化数据类型(八)- 字典关于结构化数据类型,我们已经讨论过用户定义类型(UDT)、数组、集合,今天讨论最后一个——字典(dictionary)。 与其他几种结构化数据类型不同,字典不是 VBA 内置的数据类型,使用字典类型必须添加对 Microsoft Scripting Runtime 的引用,如下图: 
图1 引用 Microsoft Scripting Runtime 前面讨论过的集合只具有最基本的字典操作能力,Dictionary 则不同,这是一个全功能的字典类型。下面还是通过例子来具体感受 Dictionary 的能力。 例1. 字典的基本操作 所谓字典,就是一个由多个元素组成的集合(collection,这里说的集合是一个通用概念,不是 VBA 的集合数据类型,所以用小写的 collection 表示),每个元素都由键/值(Key/Item)对组成。所以,也可以这样认为,所谓字典就是一个由键到值的对照表(key-item mapping table)。 字典的重要意义就在于由键快速访问对应的值。当然,访问字典的前提是字典中含有要访问的内容。所以字典操作的首要任务是向字典中添加元素。 向字典中添加元素有两种方法: 访问字典元素的方法: 更新字典元素的方法: Dictionary 的键也可以更新: 判断字典中键的存在性: 删除字典元素: 获取字典信息: 例2. 获取字典信息的等价方法 因为 Keys 和 Items 都是返回变体类型(Variant)的数组,所以枚举数组元素可以使用 For ... Next 循环,也可以使用 For Each ... Next 循环。一般来说使用 For Each ... Next 结构效率要高一点。 相关阅读 Excel VBA 编程基础 -- 结构化数据类型(六)- 集合(一) Excel VBA 编程基础 -- 结构化数据类型(七)- 集合(二)

Dim dict As New DictionaryDim v As Variantdict.Add "Name", "Musk"dict("Job") = "Tesla CEO"If dict.Exists("Name") ThenDebug.Print "Hello, " & dict("Name")End Ifdict("Job") = dict("Job") & " & SpaceX CEO"dict.Key("Job") = "Title"Debug.Print dict("Name") & "'s titles are " & dict("Title")
Add 方法:dict.Add key, item 如果 key 不存在,则添加 key/item 元素 如果 key 已存在,则发生错误 赋值方法:dict("key") = item 如果 key 不存在,则添加 key/item 元素 如果 Key 已存在,则将 key 的值更新为 item
dict("key") dict.Item("key") 如果 key 不存在,则将 key/空值 加入字典,返回 key 对应的空值 如果 key 已存在,则返回 key 对应的 item
dict("key") = item 如果 key 不存在,相当于添加元素 key/item 如果 key 已存在,则将 key 的值更新为 item
dict.Key("key") = newKey 如果 key 不存在,则更新失败 如果 key 已存在,但 newKey 也存在,则更新失败 如果 Key 已存在,但 newKey 不存在,则 key 更新为 newKey
dict.Exists("key") 如果 key 已存在,则返回 True 如果 key 不存在,则返回 False
dict.Remove("key") 如果 key 不存在,则发生错误 如果 key 已存在,则删除 key/item 元素 dict.RemoveAll 删除 dict 中所有元素
dict.Count:返回字典中元素数 dict.Keys:返回字典中所有 key 组成的数组 dict.Items:返回字典中所有 item 组成的数组
Dim dict As New DictionaryDim myA() As VariantDim i As IntegerDim v As Variantdict.Add("Name") = "Musk"dict("Title") = "Tesla CEO & SpaceX CEO"myA = dict.KeysFor i = 0 to dict.Count - 1Debug.Print myA(i)Next iFor Each v indict.KeysDebug.Print vNext vmyA = dict.ItemsFor i = 0 to dict.Count - 1Debug.Print myA(i)Next iFor Each v indict.ItemsDebug.Print vNext v
本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。