VBA初识字典(Dictionary)

在VBA中,数组可以用于数据的读取清洗以及整理,而字典则用于数据的分析以及汇总,条件查询等

其中字典(Dictionary)具有独特的属性和方法,但该对象并非VBA内部集成的对象,需要添加引用才可以在VBA中使用

字典对象被集成在Scrrun.dll动态链接库中,在使用前需要先注册该动态链接库

绑定字典有两种方式,一种是前期绑定,另外一种则是后期绑定

前期绑定

在编辑器中,工具→引用→列表中找到"(MicrosoftScriptingRuntime)"复选框,勾选确定即可

前期绑定的字段在代码窗口输入代码即可自动列出成员列表

Subtest()DimDicAsNewDictionaryEndSub

后期绑定字典

后期绑定指的是通过CreateObject函数创建字典对象的引用

Subtest()DimDicAsObjectSetDic=CreateObject("Scripting.Dictionary")EndSub

前期绑定和后期绑定的区别

前期绑定,在写代码的时候可以自动列出成员列表,效率也较高些,而且有些属性前期绑定是支持的,而后期绑定则不支持,但是前期绑定的代码并不适合其他人使用,毕竟有些人不知道怎么去绑定,并且编辑器也会检测类库是否丢失,如没找到,将产生编译错误

后期绑定,后期绑定可以自动关联最佳版本的类库,使得代码的兼容性更强些,但在代码运行之前无法确定被引用对象的属性和方法,因此在输入代码时,不会列出成员列表,有些属性无法使用

字典对象的常用方法和属性

并且关键字Key具有唯一性,在关键字Key所在代表的数组中,不允许出现重复数据,而条目Item则无此限制

按照以上的解析参数Key可以指定任意数据类型的值,参数Item也可以指定任意数据类型的值,甚至可以是数组、集合或者字典

Add

使用字典对象的Add方法可以将一组关联的关键字(Key)与条目(Item)添加到字典对象中

语法为:

DicObject.AddKey,Item示例

Subtest()DimDicAsNewDictionaryDic.Add"ByVba","每天学习一点点"MsgBoxDic("ByVba")SetDic=NothingEndSub输出结果

由于字典的关键字Key具有唯一性,如在同一对象中,就不能使用Add方法在此添加相同的关键字,否则会出现以下错误

所以可以这样写,直接给字典元素赋值

注意,如果字典中的关键字Key已存在,则会修改Key的Item值,若果关键字Key不存在则会添加新的关键字Key,如果不需要修改,就需要Exists方法

2.Exists

使用字典的Exists方法可以判断关键字Key是否存在字典中

DicObject.Exists(Key)如下图所示

Subtest()DimDicAsNewDictionaryDimaData,aKey,aItem,intX&aData=Range("A1").CurrentRegionForintX=2ToUBound(aData)IfNotDic.Exists(aData(intX,1))ThenDic(aData(intX,1))=aData(intX,2)EndIfNextaKey=Dic.KeysaItem=Dic.ItemsSetDic=NothingStopEndSub第6行代码使用字典的Exists方法判断以品牌作为关键字的Key是否存在字典中,如果不存在,则添加到字典中,并且相对应的数量作为Item,如果存在则忽略

第10和第11行,分别将Dic字典中所有的关键字Key以及条目Item转换为一维数组

取字典中所有的Key

DicObject=DicObject.Keys取字典中所有的Item

DicObject=DicObject.Items在本地窗口中可以看到字典中的所有Key以及Item

Subtest()DimDicAsNewDictionaryDimaData,Mat,intX&aData=Range("A1").CurrentRegionForintX=2ToUBound(aData)IfNotDic.Exists(aData(intX,1))ThenDic(aData(intX,1))=aData(intX,2)EndIfNextDebug.Print"关键字(Key)",vbTab,"条目(Item)"ForEachMatInDic.KeysDebug.PrintMat,vbTab,Dic(Mat)NextSetDic=NothingEndSub

或者在立即窗口查看

3.Remove

字典中的Remove方法用于删除字典对象中的一个关键字Key以及其对应的条目Item

第12行代码使用字典的Remove方法,删除了字典对象中的关键字Key"三星"

4.RemoveAll

当一个字典在循环中需要重复使用的时候,就需要使用到RemoveAll方法

DicObject.RemoveAllSubtest()DimDicAsNewDictionaryDimaData,aKey,aItem,intX&aData=Range("A1").CurrentRegionForintX=2ToUBound(aData)IfNotDic.Exists(aData(intX,1))ThenDic(aData(intX,1))=aData(intX,2)EndIfNextDic.RemoveAllMsgBox"字典中的还剩"&Dic.Count&"条记录"StopSetDic=NothingEndSub第10行代码中,使用了字典的RemoveAll方法,将字典中的数据一次性清空

THE END
1.seven97top聊聊jvm的内存结构, 以及各种结构的作用 发表于 2024-10-29 08:15阅读:376评论:0推荐:2 摘要: 什么是JVM 定义:Java Virtual Machine,JAVA程序的运行环境(JAVA二进制字节码的运行环境) 内存结构 JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于...https://cnblogs.com/seven97-top
2.数据字典的定义及组成数据字典是描述数据流图中数据的信息的集合。 它对数据流图上每一个成分:数据项、文件、数据流、数据存储、加工和外部项等给以定义和说明;它主要由数据流描述、加工描述和文件描述三部分组成。 对用户来讲,数据字典为他们提供了数据的明确定义;对系统分析员来讲,数据字典帮助他们比较容易修改已建立的系统逻辑模型。http://m.qicaisi.com/bk-688053.shtml
3.Python开发基础练习题及答案162023背题版.pdf单[选题]已知字典dic= {小明:19 , 小红:2 0 , 小李:18}, 则以下表达式执行时会报错的是() A)dic 0[]=21 B)dic [小林]=21 C) die 小[明]=21 D) die. get (小林) 答案:C 解析: 13. 单[选题]字 典对 象的 () 方法返回字典所有的 “值 ”列表。 A) get () B) items () C) ...https://max.book118.com/html/2023/0716/8015001050005111.shtm
1.一学就废Python基础碎片,字典(Dictionary)Python 中的字典是一种无序的可变容器模型,它以键值对(key - value)的形式存储数据,通过键来访问对应的值,就像一本字典通过词条(键)查找解释(值)一样。本文介绍字典常用的操作方法。 获取所有键 a = {"1":1,"2":2,"3":3} b = {"2":2,"3":3,"4":4} ...https://blog.csdn.net/aiyocxuan/article/details/143927445
2.php相关知识点梳理2、error_reporting 的作用 定义错误级别 E_ALL 是全部 E_ERROR 致命错误 E_WARNING 警告 3、include和require的区别 require引入文件如果不存在会报致命错误 导致脚本停止运行 转移用户输入的特殊字符 有addslashes htmlspcialchars 4、什么是面向对象,主要特征是什么 ...https://www.jianshu.com/p/d56d0cb50fe7
3.PythonDictionary:数据存储和检索的高效利器for key, value in dict1.items(): print(key, value) 二、 Dictionary的常见应用 1. 计数 可以利用Dictionary进行统计一个序列中各个元素出现的次数。 words = ['apple', 'banana', 'apple', 'orange', 'banana', 'banana'] word_count = {} ...https://www.506064.com/n/159359.html
4.python列表中单字典香奈儿的技术博客# Python 把一切数据都看成「对象」。它为每一个对象分配一个内存空间。 一个对象被创建后,它的 id 就不再发生变化。 #如何确定一个变量的类型?答:用type()函数来确定 i = 10 print(type(i)) #列出变量的主要类型。 #答:整型,浮点型,字符串,布尔型,列表,元组,字典,集合,None ...https://blog.51cto.com/u_12228/12620497
5.类和对象1.1身边的对象:现实世界中客观存在的任何事物都可以被看做对象.对象可以是有形的,如一辆汽车,他也可以是无形的,如一项计划.因对象无处不在. 1.https://www.u72.net/daima/n1bmz.html
6.python面试题总结pop('b') print(dic) del dic1['c'] print(dic1) 合并字典 update:可以实现字典之间的合并 dic = {'a': 1, 'b': 2} dic1 = {'c': 3, 'd': 4} dic.update(dic1) print(dic) 执行结果:{‘a’: 1, ‘b’: 2, ‘c’: 3, ‘d’: 4} 5、谈下python的GIL 进程中多...https://www.ctyun.cn/zhishi/p-424429
7.VBA字典(详解,示例)「建议收藏」腾讯云开发者社区key="姓名"value="身高"dic(key)=value 字典的属性|方法 键:dic.keys 值:dic.items 键值对条数:dic.count 判断是否存在键key:dic.exists(key) 清空字典键值对:dic.removeall 删除键为key的键值对:dic.remove key 删除字典对象:set dic = Nothing ...https://cloud.tencent.com/developer/article/2054307
8.Python中关于字典的常规操作范例以及介绍python8. 遍历字典的items(键值对) 1 2 3 dic = {'name': 'xiaohua', 'age': 18, 'sex': '男'} for k,v in dic.items(): print(k,v) 9. 实现带下标索引的遍历 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当...https://www.jb51.net/article/224199.htm
9.dict(字典)类型dic.keys() 得到字典 dic 里所有关键码,可用于 for 循环或转换为各种序列(如表)等 dic.values() 得到字典里保存的所有值,可用于 for 循环或转换为各种序列等 dic.items() 得到字典中的所有 (关键码, 值) 二元组 del dic[k] 删除字典 dic 里与 k 有关的关键码-值对 ...https://www.math.pku.edu.cn/teachers/qiuzy/computing/basics/pb_file207.htm
10.VBA进阶在VBA中使用字典进行数据统计与查询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开始) ...http://www.360doc.com/content/19/0724/21/37289152_850813425.shtml
11.Python中Collections模块如何使用# 字典所有值 print(dic.values()) # 输出如下 odict_values(['v1', 'v2', 'v3']) # items() 方法以列表返回可遍历的(键, 值) 元组数组 print(dic.items()) # 输出如下 odict_items([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')]) #pop()方法,删除指定的键值 dic.pop('k1'...https://www.chenxunyun.com/help/help_info_475.html