Попробуйте это:
Sub test()
Dim limit As Integer
limit = 3 'get limit from somewhere
Dim Arr1 as Variant
Redim Arr1(0 To 9, 0 To limit) As Variant
Dim Row As Long
For Row = 0 To 3
Arr1(0, Row) = "Zero"
Arr1(1, Row) = "One"
Arr1(2, Row) = "Two"
Arr1(3, Row) = "Three"
Arr1(4, Row) = "Four"
Arr1(5, Row) = "Five"
Arr1(6, Row) = "Six"
Arr1(7, Row) = "Seven"
Arr1(8, Row) = "Eight"
Arr1(9, Row) = "Nine"
Next Row
MsgBox Arr1(0, 0)
End Sub
Вы уже знаете пределы вы хотите, чтобы ваш массив уже так просто определить границы на старте. Вам не нужно переопределять их в любой момент.
Кроме того, Next Row
делает то же самое, как Row=Row+1
, так что вы не хотите, как
Update
Если вы хотите, вы также можете поместить свои строки в массиве
Sub test()
Dim limit As Integer
limit = 3 'get limit from somewhere
Dim Arr1 as Variant
Redim Arr1(0 To 9, 0 To limit) As Variant
Dim numbers As Variant
numbers = Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine")
Dim Row As Integer, Col As Integer
For Row = 0 To 3
For Col = 0 To 9
Arr1(Col, Row) = numbers(Col)
Next Col
Next Row
MsgBox Arr1(0, 0)
End Sub
Обновление 2
Там действительно так много способов кожи кошки ... Как насчет использования коллекций:
Sub test()
Dim numbers As Variant
numbers = Array("Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine")
Dim col As Collection
Set col = New Collection
Dim i As Integer
For i = 0 To 3 'get limit from somewhere
col.Add numbers
Next i
MsgBox col(1)(0) 'col(1 to 4)(0 to 9)
End Sub
первый ReDim находится внутри для??? – gbianchi
Это будут жестко заданные значения, которые вы помещаете в массив (т. Е. Является ли код в вопросе только MCVE, или это фактически данные, которые вы хотите использовать)? Или вы собираетесь устанавливать значения из диапазона на листе? Или они рассчитали значения? – YowE3K