Excel VBA解读(153): 数据结构——基本的数组操作
有下面两种类型的数组:
1.静态数组:数组的大小固定
2.动态数组:数组的大小不确定,在运行时设置数组的大小
两种数组的主要区别在于创建数组的方法,访问数组元素的方法相同。
声明/创建数组
下面的语句:
Dim arr(5) As Long
创建了一个可以容纳6个Long型数据的数组,第一个元素的索引值为0,最后一个元素的索引值为5,如下图1所示。
图1
也可以在声明时显示指定数组索引值的上限和下限:
Dim arr(0 To 5) As Long
当在模块的开始部分使用语句:
Option Base 1
指定数组的下限基于1时,上面两个创建数组的声明语句创建的数组大小不同。此时,语句:
Dim arr(5) As Long
创建一个可以容纳5个Long型数据的数组,第一个元素的索引值为1,最后一个元素的索引值为5,如下图2所示。
图2
而语句:
Dim arr(0 To 5) As Long
仍然是创建一个可以容纳6个Long型数据的数组,第一个元素的索引值为0,最后一个元素的索引值为5,不受Option Base语句的影响。
以上讲解的是静态数组的声明,下面来看看动态数组。
在我们事先知道需要存储多少个元素时,使用固定大小的静态数组是非常方便的。然而,许多情况下并不能事先知道要存储多少个元素,如果使用声明静态数组,或者会出现存储不够,或者会浪费空间。此时,可以考虑使用动态数组。
语句:
Dim arr() As Long
声明了一个Long型的动态数组,其大小不确定,在程序运行时动态调整。
可使用ReDim语句来重新定义数组的大小。例如,此时知道需要大小为10的数组,可以重新定义数组:
ReDim arr(9)
如果觉得需要的数组大小为20,则再重新定义数组:
ReDim arr(19)
也可以使用ReDim声明一个动态数组并指定数组的大小:
ReDim arr(6) As Long
注意,虽然可以使用ReDim方便地改变一个动态数组的大小,但每次在重新定义数组大小时,原来存储在数组中的数据会丢失。
如果需要在调整数组大小时,保留原来已经存储的数据,则可以同时使用Preserve关键字。例如:
ReDim Preserve arr(9)
其实,ReDim的作用是创建一个新数组,而Preserve的作用则是把原数组中的数据复制到新数组中。
下面的代码声明了一个动态数组arr,然后根据数组需要存储的数据动态调整数组大小并存储数据。
Dim arr() As Long
Dim i As Long
For i = 0 To 10
ReDim Preserve arr(i)
arr(i) = i * i
Nexti
获取数组的下限和上限
数组的下限,也称为最小下标,即为数组的起始索引值,一般为0,是数组的第1个元素。使用LBOUND函数来获取数组的下限:
Dim arr(5) As Long
Debug.Print "数组下限:" & LBound(arr)
数组的上限,也称为最大下标,即为数组的最大索引值,是数组的最后一个元素。使用UBOUND函数来获取数组的下限:
Dim arr(5) As Long
Debug.Print "数组上限:" & UBound(arr)
示例结果如下图3所示。
图3
给数组元素赋值/获取数组元素的值
指定数组索引值给相应数组元素赋值或者获取相应数组元素的值,例如:
Dim arr(5) As Long
arr(0)= 16
Debug.Print "数组第1个元素的值: " & arr(0)
运行结果如下图4所示。
图4
小结
数组非常容易理解,存储和获取数据都很方便,使用也很简单。其最大的特点是,可以方便地存储一组同类型的数据,非常快捷地获取存储的数据,只要你知道数据在数组中的索引值。
社区
活动
资源
关于
腾讯云开发者
扫码关注腾讯云开发者
领取腾讯云代金券
热门产品
热门推荐
更多推荐
Copyright © 2013 - 2024 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2024 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有