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