前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA数组(六)动态数组

VBA数组(六)动态数组

作者头像
无言之月
发布2019-10-13 15:37:55
6.8K0
发布2019-10-13 15:37:55
举报

大家好,前面已经介绍过了如何声明数组、数组赋值、静态数组和数组函数等等知识点,本节主要讲解动态数组。

动态数组的定义

如果在声明数组不确定数组的大小,先不固定数组的大小,而在程序在运行时使用Redim语句重新定义数组大小即为动态数组。(而如果声明数组时即确定数组大小即为静态数组。)

声明动态数组

首先在用户窗体、模块或者过程中使用dim或public语句声明一个没有下标的数组。比如:

dim 数组名称()

然后在程序过程中使用ReDim语句重新定义该数组的大小。具体完整语句如下:

ReDim [Preserve] 数组名(下界 to 上界) [ as 数据类型 ]

使用ReDim语句可以反复改变数组的大小和维度,但不能用ReDim语句更改已经声明的数据类型,除非是默认的Variant所包含的数据。

使用ReDim语句对是否保留原值有两种情况:

1、不保留原值

在默认情况下,使用RdDim语句重新定义数组大小和维度时,数组中原来保存的值将全部消失。

即Redim 数组名(下标)[as 数据类型]。

下面通过几个简单的示例演示下:

首先定义Arr1为动态数组,变量i和变量j为整形变量。通过ReDim语句重新定义Arr1为一维的1到3的数组。给数组中的3个元素一次赋值。

然后用ReDim语句再次重新定义Arr1数组大小,此时在立即窗口中显示Arr1(2)元素,已经没有值了。

2、保留原值

在ReDim语句中使用Preserve关键字,只能重新定义数组最后一维的大小,并且不能改变数组的维数,但可以保持原有数组中的原来的数据。(注意使用Preserve关键字,如果ReDim重新定义最后一维的范围变小,多余的元素也是会消失的。)

同样上面的示例中,如果ReDim语句加Preserve再次重新定义Arr1数组大小,此时在立即窗口中显示Arr1(2)元素还是原来的值。

示例

下面通过其他两个简单的示例来帮助理解动态数组:

首先声明了动态数组Arr1,声明变量i和变量j为长整型变量。

使用Range("a65536").End(xlUp).Row,即使用单元格对象的END属性,获得A列最后一行的行号。(在单元格对象属性(二)章节有介绍。)即得到A列有值得单元格的数量。

通过ReDim语句重新定义Arr1数组的大小,范围是从1 to i。实际就是有值得单元格的行号范围。

通过For循环语句将单元格 Range("a" & j).Value的值赋值给Arr1(j)。

最后在立即窗口中显示Arr(3)元素值为range("A3")的值。

首先声明了动态数组Arr1,变量i和变量j为整形变量。

通过ReDim语句重新定义Arr1数组大小为二维数组,第一维范围为1到2,第二维范围为1到3。

通过双循环嵌套结构,将Cells(i,j)单元的值赋值给Arr1(i,j)元素。(实际上数组中元素的两个维度索引号和单元格的cells属性的行号和列号一一对应。)

这种方式在很多数组应用的案例中很常见,注意理解。


本节主要介绍动态数组的内容,有问题可以给我留言,祝大家学习快乐。

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

本文分享自 Excel和Access学习笔记 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档