Найти тему
VBA Excel с нуля

VBA Excel № 119. Переносим диапазон в массив Variant.

Доброго времени суток, уважаемые читатели!

В статье представлен ещё один метод управления данными Excel в VBA, который заключается в переносе диапазона ячеек в двухмерный массив Variant. Приведенный ниже пример иллюстрирует этот подход, где диапазон ячеек "A1:Y1200" переносится в массив Variant, а затем отображаются границы обеих размерностей массива в окнах сообщений.

-2

В результате выполнения этого примера в первом окне сообщения отображается количество строк в массиве (1200), а во втором окне сообщения - количество столбцов (25), что демонстрирует быстрый и эффективный перенос данных диапазона в массив Variant.

Приведенный ниже пример на скриншоте демонстрирует дальнейшее использование массива Variant, где диапазон "данные" считывается в этот массив, выполняется операция умножения каждого элемента на 2, после чего массив Variant снова загоняем обратно в диапазон.

-3
-4
-5

Эта процедура работает очень быстро, обработка 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") & " секунд": Выводится окно сообщения с временем выполнения процедуры, рассчитанным как разница между текущим временем и временем начала выполнения, отформатированным с двумя десятичными знаками.

Наука
7 млн интересуются