Всем привет! Подскажите пожалуйства, как расширять динамический массив по мере появления новых данных, при их сборе циклом? Второй день ковыряюсь, ошибку все найти не могу))) Статей много прочёл, но с места сдвинуться не могу))
Код
Sub test()
LastRow = 2
Dim arr() As Variant
ReDim arr(1 To 1, 1 To 4)
Dim i%, k%
For i = 1 To LastRow
k = k + 1
ReDim Preserve arr(1 To UBound(arr, 1) + 1, 1 To 4) 'вылетает ошибка subscrpt out of range
arr(k, 1) = "Привет"
arr(k, 2) = "Пусто"
arr(k, 3) = "Пусто"
arr(k, 4) = "и снова здравствуйте"
Next i
Range("A1:D2") = arr
End Sub
Sub test()
Dim arr(), i&
Const LastRow& = 2
ReDim arr(1 To LastRow, 1 To 4)
For i = 1 To LastRow
arr(k, 1) = "Привет"
arr(k, 2) = "Пусто"
arr(k, 3) = "Пусто"
arr(k, 4) = "и снова здравствуйте"
Next i
Range("A1").Resize(UBound(arr,1), UBound(arr,2) ).Value = arr
End Sub
А по вашему вопросу:ReDim Preserve может менять только ПОСЛЕДНЮЮ размерность массива (столбцы - в данном случае). Вот тут подробнее про массивы.
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub test()
Const LastRow = 2
Dim brr As Variant
ReDim brr(1 To 4)
Dim arr() As Variant
ReDim arr(1 To 1)
Dim i%, k%
For i = 1 To LastRow
brr(1) = "Привет"
brr(2) = i
brr(3) = "Пусто"
brr(4) = "и снова здравствуйте"
arr(UBound(arr)) = brr
ReDim Preserve arr(1 To UBound(arr) + 1)
Next i
Dim crr As Variant
ReDim crr(1 To UBound(arr) - 1, 1 To UBound(brr))
For i = 1 To UBound(crr, 1)
For k = 1 To UBound(crr, 2)
crr(i, k) = arr(i)(k)
Next
Next
Range("A1:D2") = crr
End Sub
Kazanildarik: Проще перебрать на условие отдельно, потом задать массив и заполнить его тогда
быстрее задать массив с запасом в разумных пределах, если это можно, а как делать в вашем случае, я показал — никакого изменения размерности не нужно
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄