Вы почти у цели.
код вам нужно:
Dim myArr as Variant
myArr = range("myrange").Value2
Обратите внимание, что я использую .Value2
свойство диапазона, а не только «Value», который читает форматы и региональные настройки, и, вероятно, искажать любые даты
Обратите внимание, что я не побеспокоил Redim
и указал размеры массива: свойства Value и Value2 являются двумерным массивом (от 1 до Rowcount, от 1 до Col Count) ... Если это не так, одна ячейка, которая будет скалярным вариантом, который разбивает любой нисходящий код, ожидающий массив. Но это не ваша проблема с известным диапазоном 2250 x 2250.
Если вы отменили операцию и напишите массив обратно в диапазон, вам нужно будет установить размер принимаемого диапазона точно в размеры массива. Опять же, не ваша проблема с вопросом, который вы задали, но две операции обычно идут вместе.
Общий принцип заключается в том, что каждое «попадание» на рабочий лист занимает около двадцатого секунды - некоторые машины работают намного быстрее, но все они имеют плохие дни - и «удар» или чтение одной ячейки переменной почти точно совпадает с чтением диапазона в семь миллионов ячеек в массив вариантов. Оба значения равны миллионам раз быстрее, чем чтение этого диапазона в одной ячейке за раз.
В любом случае вы можете рассчитывать на любую операцию в VBA, как это происходит в нулевое время после того, как вы выполнили «чтение» и перестали взаимодействовать с рабочим листом.
Цифры все очень грубые и готовые, но общие принципы будут выполняться вплоть до момента, когда вы начнете выделять массивы, которые не будут вписываться в рабочую память, и, опять же, это не ваша проблема сегодня.
Вспомните Erase
вариант массива, когда вы закончили, вместо того, чтобы полагаться на него, выходит за рамки: это будет иметь значение с диапазоном этого размера.
Я просто установил книгу с данными в диапазоне от a1 до chn2250 (диапазон 2250X2250) и прочитал ее в альтернативном массиве под названием «x», используя «x = range (« a1: chn2250 »). Value2' then just to to убедитесь, что это сработало, 'debug.print x (2,2)'. Вся операция заняла менее секунды. Итак, я бы предложил вариант массива. – Kyle
Попробуйте добавить '.Value' или' .Value2', поскольку @Kyle предложил то, что у вас было выше. –
Я явно не указал «.Value2», но это ускоритель производительности. – Kyle