VBA 字典使用小结:关键字循环

一、字典的基本知识

字典是一种封装有属性和方法的对象,简单理解:字典其实就是一些“键-值”对。

字典相当于一个多行二列的二维数组或单元格数据区域。

字典数据结构有两个很重要的特性:

I key(键)不允许重复。当给字典元素赋值时,不存在key时可以新建,存在key时可以更新值。

II 数据元素通过key进行索引,我们知道,数据是通过下标进行索引的,所以顺序很重要。而字典是通过key进行索引的,所以不考虑元素顺序。通过key进行索引,在特定的场合,有它的优势所在。

应用场合:

1、对一列数据提取唯一值;

2、进行分类汇总;

3、多条件复杂汇总等。

二、声明字典

VBA中创建字典有两种方法:

2.1 引用声明(前期绑定)

在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(C:\Windows\System32),然后找到scrrun.dll,确定确定返回就行了。

添加引用后,就可以像定义其它变量一样声明使用字典了。

Sub test()

Shell ('Regsvr32 C:\Windows\System32\Scrrun.dll') 'Dos 下运行注册DLL

'Toos -> References -> Microsoft Scripting Runtime 'VBE中工具、引用

Dim dic As New Dictionary '前期绑定后就可以直接定义字典类型变量并初始化

For i = 1 To 10

dic(i) = i * 10

Next

t1 = dic.keys(2) '然后就可以直接读取第3个字典元素的关键词(注意字典数组下标是0开始)

t2 = dic.Items(2) '同样可以直接读取第3个字典元素的项目内容(注意字典数组下标是0开始)

End Sub

2.2 直接声明(后期绑定)

Dim d As Object

Set d = CreateObject("Scripting.Dictionary")

注:前期绑定的好处是:在代码编写过程中,可以直观的看到对象的属性,方法等。

       后期绑定的好处是:代码简单明了。

三、 字典的方法

字典有6个成员方法:Add、Exists、Keys、Items、Remove、RemoveAll。使用方法如下:

3.1 Add  用于添加内容到字典中。

方法一:d.Add key, item  第一个参数为键,第二个参数为键对应的值。如d.Add '优秀', 80

方法二:d(key) = item  直接赋值的方式来把内容添加到字典中,如:dic('及格') = 60

'Add [key/item] if key is new

'如果key不存在则直接加入[key/item]

dic('及格') = 70

'Cover [item] if key is exists without Err

'如果key存在则覆盖更新item 且不产生key存在的错误提示

'因此本质上,用这个方法给字典赋值、比使用 Dic.Add, item 更好!

'如需要对key存在进行错误处理,可使用Dic.Exists(key)方法,更加灵活。

3.2 Exists()  用于判断指定的关键词是否存在于字典(的键)中。

d.Exists(key)   如果存在,返回True,否则返回False。通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作。

3.3 Keys()

d.Keys()  获取字典所有的键,返回类型是数组(数组下标从0开始)。

字典使用for each next结构进行遍历时,返回的是key。

For Each di In d'也可以写成For Each di In d.keys

k = k + 1

Cells(k, 15) = dic(di)

Next

3.4 Items()

d.Items() 获取字典所有的值,返回类型是数组。

3.5 Remove()

d.Remove(key) 从字典中移除一个条目,是通过键来指定的。

如果指定的键不存在,会发生错误。

3.6 RemoveAll

d.RemoveAll 清空字典。

 

四、 字典的属性

字典有4个属性:Count、Key、Item、ConpareMode。

4.1 Count

用于统计字典中键-值对的数量。也可以简单理解为统计字典中键的个数。

常用在字典遍历时配合循环使用,如:

For i = 0 To d.Count - 1

4.2 Key

用于更改字典中已有的键。如:

d.Key('apple') = 'Orange'

如果指定的键不存在,则会产生错误。

4.3 Item

用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增。如:

'读取

Debug.Print d.Item('apple')

'写入

d.Item('apple') = 10

4.4 CompareMode

当用字符串做为key时是否区分大小写,如 Dic.CompareMode=1不区分大小写,Dic.CompareMode=0区分大小写

默认不写是区分的。

Sub test10()

Dim dic

Set dic = CreateObject('Scripting.Dictionary')

dic.Add 'D', 0

dic.Add 'd', 0

'因为默认的是区域大小写的,所以不报错

End Sub

Sub test11() '不区分大小写,

Dim dic

Set dic = CreateObject('Scripting.Dictionary') '后期绑定引用字典对象

dic.CompareMode = 1

dic.Add 'D', 0

dic.Add 'd', 0

'上面的代码报错了,因为dic.CompareMode = 1不区分大小写,所以

'你装后大写的D之后,再装小写的d,重装了,报错

End Sub

五 、总结一下:字典元素的添加、访问

任何语言的复合数据类型,做为一种数据元素容器,都要考虑数据元素的增、查、删、改,并用适当的成员方法封装起来。

5.1 字典元素的添加

d.Add 'a', 'example1'

d.Add 'b', 9

'd.Add 'b', 7 'add重复key会报错

d('b') = 7 '这样会直接覆盖,不会报错

'd.Item('b') = 7 '与上者相同

d('c') = 'example2'

5.2 字典元素值通过key的访问

Cells(1, 1) = d('a')

'Cells(1, 1) = d.Item('a') '与上者相同

六、 字典映射到单元格区域

由于字典的keys/items为按水平方向排列的一维数组,在将数据存到excel表格中时,应使用transpose函数进行行列转换.

'把字典中keys/items结果分别输出到工作表的某一列

[a1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.keys) 'Output keys result

[b1].Resize(Dic.Count) = WorksheetFunction.Transpose(Dic.items) 'Output items result

七 、实例应用

 

链接:https://pan.baidu.com/s/10GzgIVNTGrti8RQAqvUofw 
提取码:ybh3 
复制这段内容后打开百度网盘手机App,操作更方便哦

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值