前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel VBA解读(153): 数据结构——基本的数组操作

Excel VBA解读(153): 数据结构——基本的数组操作

作者头像
fanjy
发布2019-07-25 09:53:09
2.2K0
发布2019-07-25 09:53:09
举报
文章被收录于专栏:完美Excel完美Excel完美Excel

有下面两种类型的数组:

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

小结

数组非常容易理解,存储和获取数据都很方便,使用也很简单。其最大的特点是,可以方便地存储一组同类型的数据,非常快捷地获取存储的数据,只要你知道数据在数组中的索引值。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档