vba 代码中有二维动态数组S,第1次重定义为50行,但由于只用到j行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vba 代码中有二维动态数组S,第1次重定义为50行,但由于只用到j行相关的知识,希望对你有一定的参考价值。

j<50,怎样保留数组中前j行的数据重定义该二维数组为j行。

你第一次重定义的时候,一定要把可变的维数定义在最后一维,比如
ReDim s(1 To 2, 1 To 50)
然后第二次重定义的时候就可以
Redim Preserve s(1 To 2, 1 To j)

强调:重定义动态数组时,要想保持数组中原有的数据,只能修改最后一维的维数!
参考技术A 说明

ReDim 语句用来定义或重定义原来已经用带空圆括号(没有维数下标)的
Private、Public 或 Dim 语句声明过的动态数组的大小。

可以使用 ReDim 语句反复地改变数组的元素以及维数的数目,但是不能在将一个数组定义为某种数据类型之后,再使用
ReDim 将该数组改为其它数据类型,除非是 Variant 所包含的数组。如果该数组确实是包含在某个 Variant
中,且没有使用 Preserve 关键字,则可以使用 As type
子句来改变其元素的类型,但在使用了此关键字的情况下,是不允许改变任何数据类型的。

如果使用了 Preserve
关键字,就只能重定义数组最末维的大小,且根本不能改变维数的数目。例如,如果数组就是一维的,则可以重定义该维的大小,因为它是最末维,也是仅有的一维。不过,如果数组是二维或更多维时,则只有改变其最末维才能同时仍保留数组中的内容。下面的示例介绍了如何在为已有的动态数组增加其最末维大小的同时而不清除其中所含的任何数据。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

同样地,在使用 Preserve 时,只能通过改变上界来改变数组的大小;改变下界则会导致错误。

如果将数组改小,则被删除的元素中的数据就会丢失。如果按地址将数组传递给某个过程,那么不要在该过程内重定义该数组的各维的大小。

------------------------------------
ReDim 语句示例

该示例使用 ReDim 语句为动态数组变量分配和重分配存储空间。假设 Option Base 是
1。
Dim MyArray() As Integer '声明动态数组。
Redim MyArray(5) '分配 5 个元素。
For I = 1 To 5 '循环 5 次。
MyArray(I) = I '初始化数组。
Next I

下一条语句重定义该数组的大小,并清除其中的元素。
Redim MyArray(10) '大小重定为 10 个元素。
For I = 1 To 10 '循环 10 次。
MyArray(I) = I '初始化数组。
Next I

下面的语句重定义该数组的大小,但没有清除其中的元素。
Redim Preserve MyArray(15) '大小重定为 15 个元素。追问

关键是ReDim Preserve S(......后面怎么写?我在全网都没有找到正确答案,所以在此请高手解难。

追答

写数字呗, 新数组需要几个就写几
Redim Preserve MyArray(50)

参考技术B 在前面加上
Redim Preserve追问

ReDim Preserve S(......后面怎么写?ReDim Preserve S(1 To j,1 To 2)是肯定不行的。

追答

ReDim Preserve S(1 To j,1 To 2) 这样行的
但是ReDim 语句通常用于指定或修改动态数组的大小
也就是说你的s在最开始只能s()
把能在最开始就制定数组下标

Dim a()
ReDim Preserve a(1 To 3)
a(1) = Text1.Text
a(2) = Text2.Text
a(3) = Text3.Text

ReDim Preserve a(1 To 4)

Text1.Text = a(3)
Text2.Text = a(2)
Text3.Text = a(1)

vba基础4 数组

一 数组的声明与赋值

在vba中经常会使用到一维和二维数组,首先来看一下它们的声明方式。

Dim myarray
(1) 直接将单元格区域赋值给数组,此时声明的数组为二维数组。
myarray = [a1:b2]

(2)给数组赋予指定值,下面第一个是一维数组,第二个是二维数组。声明二维数组时需使用分号隔开。
myarray = [{1,2,3}]
myarray = [{1,2,3;4,5,6}]

使用Array赋值,
myarray = Array(1, 5, 3)

 

以上是关于vba 代码中有二维动态数组S,第1次重定义为50行,但由于只用到j行的主要内容,如果未能解决你的问题,请参考以下文章

vba基础4 数组

Java基础 | 深入理解多维数组

c语言二维数组里的数据如何让两行字符转换为一行字符

如何从 .t​​xt 中提取文本并将其存储到动态二维数组中?

如何在 VBA 中找到数组的最小值?

从工作表将二维数组传递给 VBA/UDF 函数