VBA 数组、集合、字典的使用
1 数组
1.1 静态数组
Sub static_arr() '静态数组 Dim a(10) As Integer ' Dim a(0 To 10) As Integer'与上一种定义方法相同 For i = 0 To 10 a(i) = i * 15 Next MsgBox a(3) End Sub
1.2 动态数组
可实现随时变化的数组
Sub active_arr() Dim a() As Integer ' ReDim a(10) As Integer x = 10 ReDim a(x) As Integer End Sub
2.列表
Sub list() Dim m As Variant Dim list As New Collection ' Set list = New Collection list.Add "a" '添加item(值) list.Add "a" list.Add "b", "B" 'key值不能重复 list.Add "c", , 1 list.Add "d", , , 1 ' Debug.Print list("B") '使用Key(键)值调用item ' Debug.Print list(1) '使用索引调用item ' ' Debug.Print list.Count '显示列表长度 ' list.Remove ("B") '通过索引或key删除指定item ' Set list = Nothing '清空集合的方法 ' Set c = New Collection t = Timer Debug.Print list.Count Debug.Print Timer - t ' MsgBox m t = Timer For Each i In list Debug.Print i Next Debug.Print Timer - t t = Timer For i = 1 To list.Count Debug.Print list(i) Next Debug.Print Timer - t End Sub
1)大数据当字典用
因为微软的问题,vba的字典超过10万key就会比较慢了,这个时候我们用集合的2参数当key来代替可以解决这个问题
经过测试
如果数据量达到40万以上key,集合方法速度完全可以接受,但是40万一下还是字典写入稍微快一点
sortedlist的使用方法https://blog.csdn.net/lyfegf/article/details/103750912?spm=1001.2014.3001.5502
arraylist的使用方法https://blog.csdn.net/lyfegf/article/details/103746134?spm=1001.2014.3001.5502
3.字典
字典不是VBA内置的类型,它是Windows脚本语言的类型。所以声明字典的方法就和VBA内置对象不同,它有两种方法声明,一种是前期绑定声明,一种是后期绑定声明。
a.前期绑定
前期绑定是需要在工具菜单的引用对话框下首先引用对象库,在编译期完成绑定,这样的优点是在编码过程中可以直接看到字典对象引用的方法和属性的提示,缺点就是移植性差,如果换一个计算机运行VBA代码,也必须在新计算机上引用对象库。方法如下:在VBE菜单中,选择“工具-引用”,在弹出的对话框中选择中边的“浏览”,此时会打开Windows系统的驱动目录(32位系统请打开C:\Windows\System32)或者(64位系统请打开C:\Windows\SysWOW64),然后找到scrrun.dll,确定即可。确定后可以检查一下“Microsoft Scripting Runtime”是否已经勾选,如下图:

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

这样的优点就是对初学者来说,在输入变量和“.”之后,可以看到属性和方法的提示,如下图:
b.后期绑定
后期绑定是指在运行代码的过程中创建对象,指定对象类型,不需要先声明。对于后期绑定来说,优点是移植性好,换个计算机运行VBA程序不需要设置引用对象库,缺点是编码时不会有提示。方法如下:

小结一下数组,集合和字典的声明方法:①数组和集合都是VBA的内置对象,都可以直接使用Dim声明 ,而字典不是VBA的内置对象,必须引用对象库后才能用Dim声明,或者在代码中用后期绑定声明。②数组、集合和字典都必须分配了内存空间才能使用属性和方法,数组分配内存空间就是确定数组的长度,集合分配内存空间就是New一个Collection,字典分配内存空间就是New一个Dictionary或CreateObject。

浙公网安备 33010602011771号