VBA数组(六)动态数组

论坛 期权论坛 期权     
Excel和Access学习笔   2019-6-29 21:08   3567   0

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


动态数组的定义

如果在声明数组不确定数组的大小,先不固定数组的大小,而在程序在运行时使用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属性的行号和列号一一对应。)
这种方式在很多数组应用的案例中很常见,注意理解。


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



Live and Learn
微信公众号:EXCEL-NOTE
(长按二维码关注)

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:45
帖子:9
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP