我在看别人的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
答案 0 :(得分:17)
Redim Preserve
允许您在保留数组内容的同时更改数组的维度。
每个循环结束时的Redim Preserve
正在向数组中添加另一行。
我认为第二个循环附加到数组,因为i
变量在循环之间没有变化。
答案 1 :(得分:12)
ReDim
会保留数组中的数据。此外,它不应该覆盖数据,因为在循环的每次迭代中i
都会递增:第一个循环不会停止,直到它遇到一个空单元格,每次迭代时将数组长度改为1,这样当长度为1时8
1
将i
添加到9
,新长度变为9
。当第二次迭代发生时,它将新元素写入索引为1
的数组的边界,再次修改其长度,使其变为{{1}}元素更长并迭代直到遇到空行。