暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

字典在VBA中的利用

VBA语言専攻 2022-07-12
143
【分享成果,随喜正能量】珍惜每一次做选择的机会,因为你任何一个不用心的选择,都可能是别人一辈子都无法企及的机会,生活里的选择很多,但若不珍惜就不足以圆满人生。
《VBA数组与字典方案》教程是我推出的第三套教程,目前已经是第一版修订了。这套教程定位于中级,字典是VBA的精华,我要求学员必学。七、一、三、九组合套教程掌握后,可以解决大多数工作中遇到的实际问题。
这套教程共两册,一共八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:字典在VBA中的利用

第三十七讲  在VBA中字典的应用方法

大家好,我们今日继续讲解VBA数组与字典解决方案37讲内容:在VBA中字典的应用。对于字典,也许许多的朋友对此比较陌生,在有的语言里字典也称之为MAP,应用也是比较广泛的。

1  什么是字典

字典,其实就是一些“键-值”对。使用起来非常方便,有类似于微型数据库的作用,可用于临时保存一些数据信息。

2  VBA中创建字典的方法

用的是WSH引用,具体代码如下:
Dim myd As Object
Set myd = CreateObject("Scripting.Dictionary")

3  字典的方法

在利用字典中,有AddExistsKeysItemsRemoveRemoveAll,六个方法。
  Add  用于添加内容到字典中。如myd.Add key, item 第一个参数为键,第二个参数为键对应的值
② Exists 用于判断指定的关键词是否存在于字典(的键)中。如myd.Exists(key)。如果存在,返回True,否则返回False。通常会在向字典中添加条目的时候使用,即先判断字典中是否已存在这个记录,如果不存在则新增,否则进行其它的操作。
Keys获取字典所有的键,返回类型是数组。如myd.Keys()
④ Items获取字典所有的值,返回类型是数组。如myd.Items()
⑤ Remove从字典中移除一个条目,是通过键来指定的。myd.Remove(key)如果指定的键不存在,会发生错误。
⑥ RemoveAll 清空字典。

4  字典的属性

字典有CountKeyItemConpareMode四种属性
① Count用于统计字典中键-值对的数量。也可以简单理解为统计字典中键的个数;
Key用于更改字典中已有的键。如:myd.Key("oapp") = "Orange" 如果指定的键不存在,则会产生错误。
Item用于写入或读取字典中指定键的值,如果指定的键不存在,则会新增。如.Item("oapp") = 10

5  简单的字典应用

下面以一个实例来说明字典的应用:在下图的A列有不同的键,要在对应的键中写入键值,然后把C列对应的键去掉,并任意增加一个键,最后在E,F列写出最后的键和键值,代码如下:
Sub MyNZsz_37() '第37讲  字典的应用
Dim dic As Object
Sheets("37").Select
Set dic = CreateObject("Scripting.Dictionary") '引用字典
Dim arr(1 To 21), i As Long  '建立一个数组用来给键赋值
For i = 1 To 21
arr(i) = i + 99
Next i
For i = 1 To 20
dic(Cells(i, "a").Value) = arr(i)  '写入键和键值,要注意写入的方法
Next i

i = 1
Do While Cells(i, 3) <> ""
dic.Remove (Cells(i, "c").Value)  '移除C列的键值
i = i + 1
Loop
dic.Add "WW21", "234"   '增加一个键,键值是234
[e1].Resize(dic.Count, 1) = Application.Transpose(dic.Keys) '转置显示键
[f1].Resize(dic.Count, 1) = Application.Transpose(dic.items) '转置显示键值
End Sub
代码截图:
代码讲解:
1)上述代码首先创建一个字典对象,然后,把工作表A列的值放到数组,作为键;第三步是给字典的键赋值,第四步移除C列的键对,第五步,增加一个键,第六步显示
2) Set dic = CreateObject("Scripting.Dictionary") '引用字典 
字典的加载有两种办法,一个是CreateObject("Scripting.Dictionary"),另外一个是引用,就是在VBE窗口,打开引用,找到Dictionary的引用即可,本书中大多以SET形式来引用字典
3)   For i = 1 To 21
arr(i) = i + 99
Next i
赋值一维数组,作为键值
4)   For i = 1 To 20
dic(Cells(i, "a").Value) = arr(i)  '写入键和键值,要注意写入的方法
Next i
写入键和键值。要特别注意是我实例中的写法
5)  dic.Remove (Cells(i, "c").Value)  '移除C列的键值
上述代码移除键和键值.
6)dic.Add "WW21", "234"   '增加一个键,键值是234
上述代码增加键和键值.
7) [e1].Resize(dic.Count, 1) = Application.Transpose(dic.Keys) '转置显示键
[f1].Resize(dic.Count, 1) = Application.Transpose(dic.items) '转置显示键值
显示键和键值

运行后的截图:


今日内容回向:
1  什么是字典?
2  字典有哪些属性?
3  如何给字典赋值?
4  利用字典如何进行排重?





我20多年的VBA实践经验,全部浓缩在下面的各个教程及各类工具中:


【分享成果,随喜正能量】世间一切乃众缘合和,众力所成,非独一人所能,是故当怀感恩之心。心怀感恩之人,心地善良,光明磊落;心怀感恩之人,善恶分明,懂得滴水之恩当涌泉相报。
文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论