VBA ReDim |使用VBA ReDim Preserve处理动态阵列
Excel VBA ReDim语句
VBA Redim 语句类似于dim语句,但是区别在于它用于存储或分配更多存储空间或减少变量或数组具有的存储空间,现在与语句一起使用的两个重要方面是Preserve(如果保留)与该语句一起使用时,它将创建一个具有不同大小的新数组,并且如果此语句未使用preserve,则它将更改当前变量的数组大小。
数组是VBA编码的重要组成部分。使用数组,我们可以在定义的同一变量中存储多个值。就像我们如何使用单词“ Dim”声明变量一样,我们也需要使用“ Dim”声明数组名称。
为了声明数组名称,我们首先需要确定要定义的数组的类型。在数组中,我们有5种类型。
- 静态数组
- 动态阵列
- 一维阵列
- 二维阵列
- 多维数组
在excel的静态数组中,我们将在声明变量时预先确定数组的下限值和上限值。例如,看下面的例子。
代码:
Sub ReDim_Example1()Dim MyArray(1至5)作为字符串结尾Sub
这里 MyArray的 是可以容纳1到5之间的值的数组的名称。MyArray可以容纳5种不同的结果,如下所示。
代码:
Sub ReDim_Example1()Dim MyArray(1至5)As String MyArray(1)=“ Hi” MyArray(2)=“ Good” MyArray(3)=“ Morning” MyArray(4)=“拥有” MyArray(5) =“美好的一天”结束子
带ReDim语句的动态数组
但是在动态数组中并非如此,我们不会提前确定下限值和上限值,而只是定义数组名称并分配数据类型。
Sub ReDim_Example1()Dim MyArray()作为字符串结尾Sub
为了使数组名称具有动态性,我们需要先用单词“ Dim”声明它,但不要提前确定数组的大小。我们只用括号()命名一个带有空值的数组。如果数组不包含大小,则将其视为动态数组。
Dim MyArray()作为字符串
当您在括号内提到数组的大小时,它将变成一个静态数组。 Dim MyArray(1到5)作为字符串
在动态数组中,我们总是通过在代码的下一行中使用单词“ ReDim”来调整数组大小。
ReDim MyArray(1到6)作为字符串
在前面的步骤中,即使用“ Dim”语句存储到数组名称的任何值都为空,并且我们使用“ ReDim”声明的大小成为数组的新大小。
使用VBA Redim语句的示例
您可以在此处下载此VBA ReDim Excel模板– VBA ReDim Excel模板范例#1
看看实际使用“ ReDim”语句的示例。请按照以下步骤应用“ ReDim”。
步骤1: 首先创建一个宏名称。
第2步: 将数组名称声明为字符串。
代码:
Sub ReDim_Example1()Dim MyArray()作为字符串结尾Sub
第三步: 现在使用单词“ Redim”并分配数组的大小。
代码:
Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1 to 3)End Sub
第4步: 因此,数组名称“ MyArray”现在最多可以容纳3个值。将值分配给这三个数组,如下所示。
代码:
Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1至3)MyArray(1)=“ Welcome” MyArray(2)=“至” MyArray(3)=“ VBA” End Sub
因此,第一个数组等于单词“ Welcome”,第二个数组等于单词“ to”,第三个数组等于单词“ VBA”。
步骤5: 现在,将这些数组值存储在单元格中。
代码:
Sub ReDim_Example1()Dim MyArray()As String ReDim MyArray(1至3)MyArray(1)=“ Welcome” MyArray(2)=“至” MyArray(3)=“ VBA” Range(“ A1”)。Value = MyArray(1)Range(“ B1”)。Value = MyArray(2)Range(“ C1”)。Value = MyArray(3)End Sub
步骤6: 如果运行此代码,我们应该分别在A1,B1和C1单元中具有这些值。
示例2 –在记住旧值的同时调整数组大小。
为数组名称分配值后,我们还可以在过程中的任何时间通过使用单词“ ReDim Preserve”来调整大小。
假设您已经声明了一个数组名称,并为这些数组名称分配了值,如下所示。
现在,您想将数组长度增加2,即5。在这种情况下,我们可以使用单词VBA“ ReDim Preserve”来调整数组长度,以记住旧值。
代码:
Sub ReDim_Example2()Dim MyArray()As String ReDim MyArray(3)MyArray(1)=“ Welcome” MyArray(2)=“至” MyArray(3)=“ VBA” ReDim保留MyArray(4)MyArray(4)= “字符1” Range(“ A1”)。Value = MyArray(1)Range(“ B1”)。Value = MyArray(2)Range(“ C1”)。Value = MyArray(3)Range(“ D1”)。值= MyArray(4)结束子
现在,我们可以为该数组分配另外两个值。
代码:
Sub ReDim_Example2()Dim MyArray()As String ReDim MyArray(3)MyArray(1)=“ Welcome” MyArray(2)=“至” MyArray(3)=“ VBA” ReDim保留MyArray(4)MyArray(4)= “字符1” Range(“ A1”)。Value = MyArray(1)Range(“ B1”)。Value = MyArray(2)Range(“ C1”)。Value = MyArray(3)Range(“ D1”)。值= MyArray(4)结束子
现在将这些值存储在单元格中。
代码:
Sub ReDim_Example2()Dim MyArray()As String ReDim MyArray(3)MyArray(1)=“ Welcome” MyArray(2)=“至” MyArray(3)=“ VBA” ReDim保留MyArray(4)MyArray(4)= “字符1” Range(“ A1”)。Value = MyArray(1)Range(“ B1”)。Value = MyArray(2)Range(“ C1”)。Value = MyArray(3)Range(“ D1”)。值= MyArray(4)结束子
现在运行宏,看看会发生什么
因此,我们在D1单元格中得到了新单词。
之所以需要使用“保留”一词,是因为数组应该记住过程中的旧数组值。
当您忽略“保留”一词时,将不会记住旧的值。
这里要记住的事情
- ReDim只能保存数组的最后一个值,而不能保存很多值。例如,我们不能使用此代码“ ReDim Preserve MyArray(4 to 5)”,这将引发错误。
- 我们不能ReDim静态数组。在圆括号内分配数组的大小后,它就会变成静态数组。
- 使用ReDim,我们无法更改数据类型。声明数组时,数组可以保存我们分配的任何数据类型。