vba字典

本文介绍了VBA中字典对象的基本用法,包括添加、查找、移除条目等方法,以及计数、键值等属性的应用。并通过实例演示如何使用字典对象统计表格中重复人员姓名及其出现次数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典对象的方法有 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

### VBA字典对象的使用教程 #### 创建字典对象 在 VBA 中可以通过后期绑定的方式创建字典对象,这种方式不需要额外引用任何库即可完成操作。通过 `CreateObject` 函数可以直接实例化一个字典对象: ```vba Dim d As Object Set d = CreateObject("Scripting.Dictionary") ``` 上述代码展示了如何利用后期绑定的方式来创建字典对象[^3]。 如果希望采用早期绑定,则需要在 VBA 编辑器中加载 Microsoft Scripting Runtime 库,并声明变量为 Dictionary 类型: ```vba Dim d As Scripting.Dictionary Set d = New Scripting.Dictionary ``` #### 添加键值对到字典 一旦成功创建了一个字典对象,就可以向其中添加键值对。这可以通过调用 `.Add` 方法实现: ```vba d.Add "Key1", "Value1" d.Add "Key2", 42 d.Add "Key3", True ``` 以上代码片段演示了如何将不同类型的数据作为值存储在字典中的过程[^1]。 #### 访问字典中的值 访问字典中的某个特定项非常简单,只需指定对应的键名即可返回其关联的值: ```vba Debug.Print d("Key1") ' 输出 Value1 Debug.Print d("Key2") ' 输出 42 Debug.Print d("Key3") ' 输出 True ``` #### 删除字典中的条目 当不再需要某些条目时,可以从字典中移除它们。这是通过 `.Remove` 或者清空整个字典的方法 `.RemoveAll` 来达成的: ```vba d.Remove "Key1" ' 移除单个条目 d.RemoveAll ' 清空所有条目 ``` #### 遍历字典的内容 为了查看或者处理所有的键值对,可以迭代字典的所有键并逐一读取相应的值: ```vba Dim key As Variant For Each key In d.Keys Debug.Print "Key: " & key & ", Value: " & d(key) Next key ``` 这段代码会打印出每一个键及其对应的价值。 #### 判断是否存在某键 有时我们需要确认某一键是否存在于当前字典之中,在此情况下可运用 `.Exists` 属性来进行判断: ```vba If d.Exists("Key2") Then Debug.Print "Key2 存在于字典中." Else Debug.Print "Key2 不存于字典中." End If ``` #### 获取字典大小 要得知目前字典里有多少组键值对,可通过查询 `.Count` 属性获得该数量信息: ```vba Debug.Print "字典中共有 " & d.Count & " 组键值对。" ``` --- ### 完整示例程序 下面给出一段完整的例子展示如何综合应用这些功能: ```vba Sub Example_Dictionary() Dim d As Object Set d = CreateObject("Scripting.Dictionary") ' 添加一些数据 d.Add "Name", "Alice" d.Add "Age", 30 d.Add "City", "New York" ' 打印数据 Debug.Print "姓名:" & d("Name") Debug.Print "年龄:" & d("Age") Debug.Print "城市:" & d("City") ' 修改数据 d("Age") = 31 ' 检查存在性 If d.Exists("City") Then Debug.Print "居住的城市已记录。" End If ' 迭代显示所有数据 Dim key As Variant For Each key In d.Keys Debug.Print "Key: " & key & ", Value: " & d(key) Next key ' 删除一项 d.Remove ("Name") ' 显示剩余项目数 Debug.Print "现在字典中有 " & d.Count & " 个项目。" End Sub ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值