Доброго времени суток, уважаемые читатели!
В статье представлен ещё один метод управления данными Excel в VBA, который заключается в переносе диапазона ячеек в двухмерный массив Variant. Приведенный ниже пример иллюстрирует этот подход, где диапазон ячеек "A1:Y1200" переносится в массив Variant, а затем отображаются границы обеих размерностей массива в окнах сообщений.
В результате выполнения этого примера в первом окне сообщения отображается количество строк в массиве (1200), а во втором окне сообщения - количество столбцов (25), что демонстрирует быстрый и эффективный перенос данных диапазона в массив Variant.
Приведенный ниже пример на скриншоте демонстрирует дальнейшее использование массива Variant, где диапазон "данные" считывается в этот массив, выполняется операция умножения каждого элемента на 2, после чего массив Variant снова загоняем обратно в диапазон.
Эта процедура работает очень быстро, обработка 30000 ячеек занимает менее секунды.
И конечно, давайте посмотрим на код построчно:
- Dim x As Variant: Объявляется переменная x типа Variant, которая будет использоваться для хранения данных из диапазона ячеек.
- Dim r As Long, c As Integer: Объявляются переменные r и c для использования в циклах. r типа Long будет использоваться для итерации по строкам, а c типа Integer для итерации по столбцам.
- Dim ВремяНачала As Double: Объявляется переменная ВремяНачала типа Double, которая будет использоваться для хранения времени начала выполнения процедуры.
- ВремяНачала = Timer: Значение текущего времени записывается в переменную ВремяНачала с использованием функции Timer.
- x = Range("данные").Value: Данные из диапазона "данные" считываются в массив x.
- For r = 1 To UBound(x, 1): Начинается цикл For для итерации по строкам массива x UBound(x, 1) возвращает количество строк в массиве x.
- For c = 1 To UBound(x, 2): Вложенный цикл For для итерации по столбцам массива x UBound(x, 2) возвращает количество столбцов в массиве x.
- x(r, c) = x(r, c) * 2: Каждый элемент массива x умножается на 2.
- Next c: Окончание вложенного цикла For, переход к следующему столбцу.
- Next r: Окончание внешнего цикла For, переход к следующей строке.
- Range("данные") = x: Измененные данные массива x передаются обратно в диапазон "данные" на листе.
- MsgBox Format(Timer - ВремяНачала, "00.00") & " секунд": Выводится окно сообщения с временем выполнения процедуры, рассчитанным как разница между текущим временем и временем начала выполнения, отформатированным с двумя десятичными знаками.