Что делает ReDim Preserve?
Я смотрю на кого-то еще код 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
Ответы
Ответ 1
ReDim
сохраняет данные в массиве при изменении его размера. Также он не должен перезаписывать данные becasuse i
увеличивается на каждую итерацию цикла: первый цикл не останавливается, пока не встретится с пустой ячейкой, изменив длину массива на каждую итерацию на единицу, так что, когда длина равна 8
он добавляет 1
к i
, а новая длина становится 9
. Когда происходит вторая итерация, он записывает новый элемент в границу массива с индексом 9
, снова изменяет его длину, чтобы он становился 1
элементом дольше и повторяется до тех пор, пока не встретит пустую строку.
Ответ 2
Redim Preserve
позволяет изменять размеры массива, сохраняя содержимое массива.
Redim Preserve
в конце каждого цикла добавляет еще одну строку в массив.
Я думаю, что второй цикл добавляется к массиву, потому что переменная i
не изменяется между циклами.