再次写一遍,巩固一下,本次写程序过程中用到的 遗忘的知识点(主要是VBA数组和VBA字典的用法)

1、数组
1.1
'定义一个常量数组
Dim arr As Variant ' 声明一个变量
arr = Array("one", "two", "three") '定义一个数组 长度为2 数组元素目前为 arr(0) = "one", arr(1) = "two", arr(2) = "three"
' 此时数组的内容为 arr(0) = "one", arr(1) = "two", arr(2) = "three"
1.2
'定义一个 已确定的动态数组
dim arr(0 to 1) '定义一个数组 长度为2 数组元素目前为 arr(0) arr(1)
arr(0) = "one" '设置数组元素目前为 arr(0) = "one"
arr(1) = "two" '设置数组元素目前为 arr(1) = "two"
' 此时数组的内容为 arr(0) = "one" arr(1) = "two"
1.3
'定义一个 不确定的动态数组
dim arr() '定义一个数组 长度待定
' 假设你写了一些代码,此时已经确定了数组长度
ReDim arr(0 to 1)'清空原数组内容,重新定义数组长度 长度为2 数组元素目前为 arr(0) arr(1)
arr(0) = "one" '设置数组元素目前为 arr(0) = "one"
arr(1) = "two" '设置数组元素目前为 arr(1) = "two"
' 此时数组的内容为 arr(0) = "one" arr(1) = "two"
1.4
'定义一个 前面确定,后面不确定的动态数组,并且不需要之前的数组内容
Dim arr As Variant ' 声明一个变量
arr = Array("one", "two", "three") '定义一个数组 长度为2 数组元素目前为 arr(0) = "one", arr(1) = "two", arr(2) = "three"
' 假设你写了一些代码,此时已经确定了数组长度
ReDim arr(0 to 1)'清空原数组内容,重新定义数组长度 长度为2 数组元素目前为 arr(0) arr(1)
arr(0) = "one" '设置数组元素目前为 arr(0) = "one"
arr(1) = "two" '设置数组元素目前为 arr(1) = "two"
' 此时数组的内容为 arr(0) = "one" arr(1) = "two"
1.5
'定义一个 前面确定,后面不确定的动态数组,并且需要保留原数组的内容
Dim arr() '首先定义一个动态数组
arr = Array("one", "two") '定义一个数组 长度为2 数组元素目前为 arr(0) = "one", arr(1) = "two"
' 假设你写了一些代码,此时已经确定了数组长度
ReDim Preserve arr(0 To 3) '保留原数组内容,重新定义数组长度 长度为4 数组元素目前为 arr(0) arr(1)
arr(2) = "three" '设置数组元素目前为 arr(2) = "three"
arr(3) = "four" '设置数组元素目前为 arr(3) = "four"
' 此时数组的内容为 arr(0) = "one" arr(1) = "two" arr(2) = "three" arr(3) = "four"
1.6
' 其他数组常用方法
UBound(arr) '获取数组最大值
LBound(arr) '获取数组最小值
Join(arr, "+") '将数组合并为一个字符串,合并字符为 "+"
' 数组的好处:效率极高,类似于Python的 NumPy库 可以向量化操作,比一个一个的单元格读写要快得多
另附一张图,用来解释数组的 split用法:(和join不同,join是和 split是分,如图是将arr(0) 即 A,B,C,D,E,F 拆分成 一个小数组 s 详见下图本地窗口)

2、字典
2.1
' 创建字典
'后期绑定:方便代码在其他电脑上运行,推荐。
dim dic as object
Set dic = CreateObject("scripting.dictionary")
2.2
' 创建字典
'前期绑定:可以直接声明字典对象,有对象属性和方法的提示,但在其他没有勾选引用的电脑上无法正常运行。
'引用勾选:VBE窗体-工具-引用-勾选‘Microsoft Scripting Runtime’
dim dic as New dictionary
2.3
with activesheet
' 字典增加内容
'dic.add "内容","数据"
'清除单个字典键-值对,key是字典的某个需要删除的键
dic.remove key
'清空字典,有时候其他过程也需要使用字典,当前过程已经使用完了,但我们又不想重新创建字典对象,这时候我们可以public字典全局变量,再清空字典,供新的过程使用该字典对象。
dic.removeall
'判断某内容是否存在与字典的键中
if dic.exists("内容") then debug.print "字符串‘内容’存在于字典的键中"
' 其他常用方法
'dic.count:字典计数,字典中一共有多少条记录;
'dic.keys:字典的键,写入单元格以行写入,如需以列写入单元格,调用工作表函数transpose转置;
'dic.items:字典的值;
'dic.keys()(0) 字典的第一个键
'dic.keys()(dic.count-1) 字典的最后一个键
'dic.items()(0) 字典的第一个值
'dic.items()(dic.count-1) 字典的最后一个值
' 注意点:dic.count 是从1开始 dic.keys()(0) 从字典中选取某个键,或者某个值,是从0开始 dic.count-1 结尾 请勿混淆 用法类同数组
end with
最后引用一张来自ExcelHome的神图
