Среди других проблем:
Вы можете только ReDim
последний элемент многомерного массива.
Ваша строка
arr = sh1.Range("D:F")
создаст 12D-массив на основе: arr(1 to 1048576, 1 to 4)
.Если у вас есть база данных с более чем 1010 * элементами, вы можете рассмотреть возможность использования другого инструмента.
Таким образом, допустимая команда может быть
Redim Preserve arr(1 to ubound(arr,1), 1 to ubound(arr,2)+1)
Но это не то, что вы делаете.Чтобы выполнить то, что вы хотите сделать, попробуйте что-то вроде этого:
For i = LBound(arr) To UBound(arr)
If d.Exists(arr(i, 3)) Then
X = d(arr(i, 3))
ReDim Preserve X(UBound(X, 1) + 1)
X(UBound(X, 1)) = arr(i, 1)
d(arr(i, 3)) = X
Else
d.Add Key:=arr(i, 3), Item:=Array(arr(i, 1))
End If
Next i
Но почему бы просто не использовать Dictionary
или Collection
для хранения вашего списка предметов.Тогда вам не нужно беспокоиться об изменении размера вашего массива.