Vba ReDim Preserve做什么?

Vba ReDim Preserve做什么?,vba,excel,Vba,Excel,我正在查看其他人的vba excel代码。他们在两个循环中都做了ReDim-Preserve-dataMatrix(7,i)。这有什么用 而且,第二个循环似乎只是覆盖了第一个循环中的数据,对吗 Dim dataMatrix() As String Worksheets.Item("ETS").Select Do While Trim(Cells(r, 1)) <> "" Debug.Print "The line: ", Trim(Cells(r, 1

我正在查看其他人的vba excel代码。他们在两个循环中都做了
ReDim-Preserve-dataMatrix(7,i)
。这有什么用


而且,第二个循环似乎只是覆盖了第一个循环中的数据,对吗

Dim dataMatrix() As String

    Worksheets.Item("ETS").Select
    Do While Trim(Cells(r, 1)) <> ""
       Debug.Print "The line: ", Trim(Cells(r, 1)), r
        r = r + 1
        dataMatrix(1, i) = Trim(Cells(r, 1))    ''file name
        dataMatrix(2, i) = Trim(Cells(r, 2))    ''sample type
        dataMatrix(3, i) = Trim(Cells(r, 3))    ''sample name
        dataMatrix(4, i) = "ETS"    ''
        dataMatrix(5, i) = Trim(Cells(r, 5))    ''Response
        dataMatrix(6, i) = Trim(Cells(r, 6))    ''ISTD Response
        dataMatrix(7, i) = Trim(Cells(r, 10))   ''Calculated Conc
        i = i + 1
        ReDim Preserve dataMatrix(7, i)
    Loop

    r = 5
    Worksheets.Item("ETG").Select
    Do While Trim(Cells(r, 1)) <> ""
       Debug.Print "The line: ", Trim(Cells(r, 1)), r
        r = r + 1
        dataMatrix(1, i) = Trim(Cells(r, 1))    ''file name
        dataMatrix(2, i) = Trim(Cells(r, 2))    ''sample type
        dataMatrix(3, i) = Trim(Cells(r, 3))    ''sample name
        dataMatrix(4, i) = "ETG"
        dataMatrix(5, i) = Trim(Cells(r, 5))    ''Response
        dataMatrix(6, i) = Trim(Cells(r, 6))    ''ISTD Response
        dataMatrix(7, i) = Trim(Cells(r, 10))   ''Calculated Conc
        i = i + 1
        ReDim Preserve dataMatrix(7, i)
    Loop
Dim dataMatrix()作为字符串
工作表。项目(“ETS”)。选择
边修剪边执行(单元格(r,1))“”
调试。打印“行:”,修剪(单元格(r,1)),r
r=r+1
数据矩阵(1,i)=修剪(单元格(r,1))''文件名
数据矩阵(2,i)=修剪(单元格(r,2))''样本类型
数据矩阵(3,i)=修剪(单元格(r,3))''样本名称
数据矩阵(4,i)=“ETS”
数据矩阵(5,i)=微调(单元格(r,5))响应
数据矩阵(6,i)=微调(单元格(r,6))''ISTD响应
数据矩阵(7,i)=微调(单元格(r,10))''计算浓度
i=i+1
ReDim保留数据矩阵(7,i)
环
r=5
工作表。项目(“ETG”)。选择
边修剪边执行(单元格(r,1))“”
调试。打印“行:”,修剪(单元格(r,1)),r
r=r+1
数据矩阵(1,i)=修剪(单元格(r,1))''文件名
数据矩阵(2,i)=修剪(单元格(r,2))''样本类型
数据矩阵(3,i)=修剪(单元格(r,3))''样本名称
数据矩阵(4,i)=“ETG”
数据矩阵(5,i)=微调(单元格(r,5))响应
数据矩阵(6,i)=微调(单元格(r,6))''ISTD响应
数据矩阵(7,i)=微调(单元格(r,10))''计算浓度
i=i+1
ReDim保留数据矩阵(7,i)
环

Redim Preserve
允许您在保留数组内容的同时更改数组的维度

每个循环末尾的
Redim Preserve
正在向数组中添加另一行


我认为第二个循环是附加到数组中的,因为
I
变量在循环之间没有更改。

ReDim
在修改数组大小时保留数组中的数据。它也不应该覆盖数据,因为
i
在循环的每次迭代中都会递增:第一个循环不会停止,直到它遇到一个空单元格,每次迭代将数组长度更改一次,因此当长度为
8
时,它会将
1
添加到
i
中,新的长度变为
9
。当第二次迭代发生时,它用索引
9
将新元素写入数组的边界,再次修改其长度,使其变为
1
元素,并进行迭代,直到遇到空行。

此外,第二个循环似乎只是覆盖了第一个循环中的数据,对吗,第二个循环附加到数组,因为
i
在循环之间没有重置。您的点是?几天前我得到了一张选票,引起了我的注意。我在两天前添加了这条评论,但我也在我的回答中回答了它。好吧,“答案”在过去两年一直在我的回答中。我这样做不是为了你的利益。我在这里,所以我更新了评论,以供将来可能看到它的人参考。我不知道你是在开玩笑还是在胡闹。如果你想搞笑的话,我很抱歉我不这么想。看起来第二个循环只是覆盖了第一个循环中的数据,对吗?第二个循环不会覆盖第一个循环中的数据,因为我在第一个循环后不会重置。第二个循环将内容附加到第一个循环中生成的数据矩阵中。