У меня есть несколько очень больших наборов данных в Excel, которые мне нужно проанализировать, и сделать это в массиве быстрее, чем перебирать данные на листе. Загрузка всех данных в массив вызывает проблемы с памятью (наборы данных ТАКИЕ большие), поэтому я планирую загружать подмножества данных в массив, обрабатывать их, а затем загружать другое подмножество. Я надеялся использовать «функцию» массива для определения LBound и UBound, чтобы помочь мне отслеживать, где я нахожусь на листе. Но я обнаружил, что присвоение значений рабочего листа массиву меняет границы. Следующий код демонстрирует проблему ...
Sub myTest3()
Dim myRange As Range
Dim myArray As Variant
Dim myOffset As Long
myOffset = 10
Set myRange = Worksheets("RawData").Range("A1").CurrentRegion
ReDim myArray(myOffset To myRange.Rows.Count, myRange.Columns.Count)
MsgBox LBound(myArray, 1) & " to " & UBound(myArray)
Set myRange = myRange.Offset(myOffset, 0).Resize(myRange.Rows.Count - myOffset, myRange.Columns.Count)
myArray = myRange.Value2
MsgBox LBound(myArray, 1) & " to " & UBound(myArray)
End Sub
Первый MsgBox дает мне «от 10 до 10931». Второй MsgBox дает мне «от 1 до 10921».
Есть идеи по поддержанию границ массива, как я их изначально определил? Я знаю, что перебор рабочего листа для выполнения задания сработает, но это будет медленным.
Заранее спасибо.
ReDim
для повторного объявления массива с нижней границей10
, здесь:ReDim myArray(myOffset to ...
. Что именно вы пытаетесь сделать с переменнойmyOffset
? Думаю, в этом причина. - person David Zemens   schedule 21.10.2013