vba⼆维数组初始化_VBA编程知识点(12)——⼯作表转⼆
维数组提⾼效率
VBA编程知识点(12)——⼯作表转⼆维数组提⾼效率
学习⾃杨洋⽼师《全民⼀起VBA》
在excel中读取单元格的操作是最耗时的操作之⼀,把表格数据转换为⼆维数据,能够⼤⼤提⾼程序运⾏速度。
声明⼆维数组
dim a(4,5),最⼤⾏号为4,最在列号为5,从0开始,共有5*6=30个数据。
dim a(1 to 3,2 to 6),⾏号从1开始,列号从2开始,共有3*5=15个数据。
声明⼆维动态数组,dim a(),与声明⼀维动态数组⼀样。
⼯作表其实就是⼀个⼆维数组,⾏号与列号都从1开始,各元素的类型是range
⼯作表转换为⼆维数组
第⼀步声明⼀个动态数组,dim a()
第⼆步为动态数组赋值,a = Range(“A1:E12”),现在动态数组重新定义成12⾏,5列的数组,每个元素都是range范围中对应的数据。
数组全部赋值为1注意:
(1)此时,数组的下标默认从1开始。
(2)⽤于从range读取内容的数组,必须声明为动态数组,⽽且必须是变体类型!即声明的数组范围与range范围⼤⼩⼀致,数组类型与range类型⼀致,也⼀样会出错。
例dim a(5,6)、dim a() as long,这样的数组都不能成功执⾏a = Range(“XX:XX”)的操作。
(3)即使range只有⼀⾏,动态数组仍然被定义为⼆维数组,⽽不是⼀维的。
把数组写⼊⼯作表
语句⽰例:Range(“A1:E12”) = a
此时数组a可以是固定长度的数组,也可以是固定类型的数组,下标可以是任意范围,但要求是⼆维的。
⼀个代码⽰例
操作单元格⼀百万次,耗时30秒
For i = 1 to 50000
for i = 1 to 20
Cells(i , j) = Cells(i , j) * 2
Next j
Next i
所有运算在数组中运⾏,最后只操作⼀次单元格,耗时1秒。
s = Range(“A1:T50000”) ‘s是⼀个⼆维动态数组
For i = 1 to 50000
for i = 1 to 20
s(i , j) = s(i , j) * 2
Next j
Next i
Range(“A1:T50000”) = s
⼀维数组与range
⼀维数组不能从range中读⼊数据,但可以写⼊到range(只能是某⾏或某列)中:
(1)写⼊⼯作表某⾏:直接赋值给range的value属性。⼀维数组默认是⼀⾏的。例:Range(A1:F1) = a
(2)写⼊⼯作表某列:先使⽤Transpose函数进⾏数组进⾏转置。例:Range(A1:A10) = Application.Transpose(a)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论