VBA学习笔记19:数组1
学习资源:《Excel VBA从入门到进阶》第20集 by兰色幻想
一、什么是VBA数组?
VBA数组就是储存一组数据的数据空间,数据类型可以数字,可以是文本,可以是对象,也可以是VBA数组。
有点像之前的Union:将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作,但union一次性处理30个以上的不连续区域,读写速度就会下降很多,可通过反复读写来解决。
而数组的大小是自己定义的,目前听课下来是没有限制定义大小。
关于数组的特点,老师做了以下对比演示:
v4:直接调用 内存中的值 运算,让变量m=m+1000,运行时间:0.01s
v5:调用 单元格中的值 进行运算,让变量m=m+cells(1,1),运行时间:1.5s
直接调用内存运行时间更快,这就是为什么要使用数组的原因。
二、数组存在形态
VBA数组是以变量形式存放的一个空间,它也有行有列,也可以是三维空间。
1) 常量数组
array(1,2)
array(array(1,2,4),array("a","b","c"))
2) 静态数组
x(4) 有5个位置,编号从0~4
arr(1 to 10) 有10个位置,编号1~10
arr(1 to 10,1 to 2) 10行2列的空间,总共20个位置,这是二维数组
arr(1 to 10,1 to 2,1 to 3) 三维数组,总10*2*3=60个位置。这是三维数组
3)动态数组
arr() 不知道有多少行多少列
(使用动态数组后,在得知数组长度要重新声明数组大小)
三、读入数组
1、按编号(标)写入和读取
①写入一维数组
Sub t1()
'定义一维静态数组,有10个位置,编号1~10
Dim arr(1 To 10)
Dim x As Integer
'利用循环把单元格依次放入数组
For x = 1 To 10
arr(x) = cell(x, 1) * 100
Next x
'或者直接把常量/变量数值放入数组
arr(2) = 190
arr(10) = 5
End Sub
②向二维数组写入数据和读取
Sub t2()
'定义二维静态数组,有5行四列,20个位置
Dim x As Integer, y As Integer
Dim arr(1 To 5, 1 To 4)
'利用循环把单元格依次放入数组
For x = 1 To 5
For y = 1 To 4
arr(x, y) = Cells(x, y)
Next y
Next x
'或者直接把常量/变量数值放入数组
arr(2,1) = 190
MsgBox arr(3, 1)
End Sub
2、动态数组
Sub t3()
'定义动态数组
Dim arr()
Dim row
Dim x As Integer
'获取到行后重新声明数组大小
row = Sheets("sheet2").Range("a65536").End(xlUp).row - 1
ReDim arr(1 To row)
'利用循环把单元格依次放入数组
For x = 1 To row
arr(x) = Cells(x, 1)
Next x
MsgBox arr(3)
End Sub
3、批量写入
①由常量数组导入,不定义变量类型,直接赋值静态数组,变量就被定义为数组。
Sub t4()
Dim arr
arr = Array(1, 2, 3, "a")
End Sub
②由单元格区域导入
Sub t5()
Dim arr