Что делает ReDim, Сохраняют, делают?

Я смотрю на чужой 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
18
задан moffeltje 8 February 2016 в 08:12
поделиться

2 ответа

ReDim сохраняет данные в массиве, когда вы изменяете его размер. Также он не должен перезаписывать данные, потому что i увеличивается каждую итерацию цикла: первый цикл не останавливается, пока не встретит пустую ячейку, изменяя длину массива каждую итерацию на единицу, так что когда длина равна 8, он добавляет 1 к i и новая длина становится 9. Когда происходит вторая итерация, он записывает новый элемент в границу массива с индексом 9, снова изменяет его длину так, что он становится на 1 элемента длиннее, и итерирует до тех пор, пока не встретит пустую строку.

13
ответ дан 30 November 2019 в 07:55
поделиться

Redim Preserve позволяет изменять размеры массива, сохраняя при этом содержимое массива.

Redim Preserve в конце каждого цикла добавляет еще одну строку в массив.

Я думаю, что второй цикл примыкает к массиву, потому что переменная i не изменяется между циклами.

18
ответ дан 30 November 2019 в 07:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: