常见字典用法集锦及代码详解(全)_蓝桥玄霜 下载本文

内容发布更新时间 : 2024/4/23 22:59:50星期一 下面是文章的全部内容请认真阅读。

字典的简介

常用语句: Dim d

Set d = CreateObject(\ d.Add \ d.Add \ d.Add \ ……

d.Remove(“b”) 【清除字典中”b”关键字和与它对应的项。清除之后,现在字典里只有2个关键字了。】

RemoveAll方法

RemoveAll 方法从一个 Dictionary 对象中清除所有的关键字,项目对。 object.RemoveAll( )

其中 object 总是一个 Dictionary 对象的名称。 常用语句: Dim d

Set d = CreateObject(\ d.Add \ d.Add \ d.Add \ ……

d.RemoveAll 【清除字典中所有的数据。也就是清空这字典,然后可以添加新的关键字和项,形成一本新字典。】

字典对象的属性有4个:Count属性、Key属性、Item属性、CompareMode属性。 Count属性

返回一个Dictionary 对象中的项目数。只读属性。 object.Count

其中 object一个字典对象的名称。 常用语句:

Dim d,n% 【声明变量,d见前例;n被声明为整型数据类型(Integer)。】 Set d = CreateObject(\ d.Add \ d.Add \ d.Add \

n = d.Count 【把字典中所有的关键字的数量赋给变量n。本例得到的是3。】

Key属性

在 Dictionary 对象中设置一个 key。 object.Key(key) = newkey 参数: object

必选项。总是一个字典 (Dictionary) 对象的名称。

5

常见字典用法集锦及代码详解

key

必选项。被改变的 key 值。 newkey

必选项。替换所指定的 key 的新值。 说明

如果在改变一个 key 时没有发现该 key,那么将创建一个新的 key 并且其相关联的 item 被设置为空。

常用语句: Dim d

Set d = CreateObject(\ d.Add \ d.Add \ d.Add \

d.Key(\ 【用新的关键字”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(\ d.Add \ d.Add \ d.Add \

MsgBox d.Item(\ 【获取指定的关键字”c”对应的项。】

CompareMode属性

设置或者返回在 Dictionary 对象中进行字符串关键字比较时所使用的比较模式。 object.CompareMode[ = compare] 参数 object

必选项。总是一个 Dictionary 对象的名称。

6

实例1 普通常见的求不重复值问题

compare

可选项。如果提供了此项,compare 就是一个代表比较模式的值。可以使用的值是 0 (二进制)、1 (文本), 2 (数据库)。

说明

如果试图改变一个已经包含有数据的 Dictionary 对象的比较模式,那么将导致一个错误。 常用语句: Dim d

Set d = CreateObject(\

d.CompareMode = vbTextCompare 【设置字典的比较模式是文本,在这种比较模式下不区分关键字的大小写,即关键字”b”和”B”是一样的。vbTextCompare的值为1,所以上式也可写为 d.CompareMode =1 。如果设置为vbBinaryCompare(值为0),则执行二进制比较,即区分关键字的大小写,此种情况下关键字”b”和”B”被认为是不一样的。】

d.Add \ d.Add \ d.Add \

d.Add \ 【添加一关键字”B”和对应于它的项”Baltimore”。由于前面已经设置了比较模式为文本模式,不区分关键字的大小写,即关键字”b”和”B”是一样的,此时发生错误添加失败,因为字典中已经存在”b”了,字典中的关键字是唯一的,不能添加重复的关键字。】

实例1 普通常见的求不重复值问题

一、问题的提出:

表格中人员有很多是重复的,要求编写一段代码,把重复的人员姓名以及重复的次数求出来,复制到另一个表格中。

如图实例1-1所示。

图 实例1-1

7

常见字典用法集锦及代码详解

二、代码: Sub cfz()

Dim i&, Myr&, Arr 【变量i和Myr声明为长整型变量Long。Arr默认可变型数据类型(Variant)。】 Dim d, k, t

Set d = CreateObject(\ 【创建字典对象,并把字典对象赋给变量d。】 Myr = Sheet1.[a65536].End(xlUp).Row 【把表1的A列最后一行不为空白的行数赋给变量Myr。这里用了Range对象的End属性,它有4个方向参数,此处的xlUp表示向上,它的值为3,所以也可写成End(3)。xlDown表示向下,它的值为4;xlToLeft表示向左,它的值为1;xlToRight表示向右,它的值为2。】 Arr = Sheet1.Range(\& Myr) 【把表1的A1到G列最后一行不为空白的 单元格区域的值赋给变量Arr。这样Arr就是个二维数组了,用数组替代单元格引用可对执行代码的速度提高很多很多。】 For i = 2 To UBound(Arr) 【从2开始到数组的最大上界值之间循环。因为数组的第一行是表头。Ubound是VBA函数,返回数组的指定维数的最大可用上界。】 d(Arr(i, 3)) = d(Arr(i, 3)) + 1 【Arr(i,3)在本例是姓名列,也就是关键字列,举个例子,假如Arr(i,3)=”张三”,这句代码的意思就是把关键字”张三”加入字典,d(key)等于关键字key对应的项,每出现一次这个关键字,它的项的值就增加1。起到了按关键字累加的作用,也正因为有这个作用,所以可使用字典来进行各种汇总统计。后面要讲的实例会充分的展现这个作用。】 Next

k = d.keys 【把字典d中存在的所有的关键字赋给变量k。得到的是一个一维数组,下限为0,上限为d.Count-1。Keys是字典的方法,前面已经讲过了。】 t = d.items 【把字典d中存在的所有的关键字对应的项赋给变量t。得到的也是一个一维数组,下限为0,上限为d.Count-1。Items也是字典的方法,前面也已经讲过了。】 Sheet2.Activate 【激活表2】

[a2].Resize(d.Count, 1) = Application.Transpose(k) 【把字典d中所有的关键字赋给以a2单元格开始的单元格区域中。】 [b2].Resize(d.Count, 1) = Application.Transpose(t) 【把字典d中所有的关键字对应的项赋给以b2单元格开始的单元格区域中。】 [a1].Resize(1, 2) = Array(\姓名\\重复个数\ 【Array是一个VBA函数,返回一个下界为0的一维数组。一维数组可以看作是水平排列的,所以赋值给水平的单元格区域不需要用转置函数了。这里作为表头一次性输入。】 Set d = Nothing 【释放字典内存。】 End Sub

代码执行后如图实例1-2所示。

8