建立数组并写入数据_VBA学习笔记19:数组1

本文介绍了VBA中的数组概念,包括数组的定义、类型和优势。通过对比直接读取内存与单元格的运行时间,强调了数组在效率上的优势。详细讲解了常量数组、静态数组和动态数组的声明方式,并阐述了如何向数组中写入和读取数据,以及如何查看数组内容。最后,作者分享了在实际工作中应用VBA数组的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fd5ba76b9d9672b863ab4f4e72fdae4f.png

学习资源:《Excel VBA从入门到进阶》第20集 by兰色幻想

一、什么是VBA数组?

VBA数组就是储存一组数据的数据空间,数据类型可以数字,可以是文本,可以是对象,也可以是VBA数组。

有点像之前的Union:将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作,但union一次性处理30个以上的不连续区域,读写速度就会下降很多,可通过反复读写来解决。

而数组的大小是自己定义的,目前听课下来是没有限制定义大小。

关于数组的特点,老师做了以下对比演示:

v4:直接调用内存中的值运算,让变量m=m+1000,运行时间:0.01s

v5:调用单元格中的值进行运算,让变量m=m+cells(1,1),运行时间:1.5s

直接调用内存运行时间更快,这就是为什么要使用数组的原因。

0157277f9620d870930a207506fff30a.gif
v5实际运行时间比老师写的还慢233333

二、数组存在形态

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
arr = Range("a1:d5")
End Sub

4、数组的查看

在VBE中点击“视图”-“本地窗口”

拿t4作为例子:(在写入数组后,写一个stop或在End Sub前面点一下设置断点)

Sub t4() 
Dim arr
arr = Array(1, 2, 3, "a")
  Stop
End Sub

de3b5b3bbc9d715f3991aec9cd4ab6d8.png

运行程序,本地窗口就会出现数组读数。

c0df671d92f7622b3061d526ffdfa651.png

三、小结

其实本来是想学完整个数组再一块写笔记,但拖延症让我看完了视频却懒得写,导致现在又忘了数组讲什么,于是还是乖乖每次听完课就做笔记吧。

我自己也有在工作中应用VBA,之前没学数组,直接调用单元格中的值,写了个调用数据程序真的运行得很慢慢慢慢慢……才五六千条数据就运行了两三分钟,而且整个电脑都卡住了。后面学了union,改进了一下程序就好很多,但也要运行快一分钟。等学完数组,得再进行一次改写程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值