VBA Excel. Урок 3. Переменные. Типы данных.

Макросы на VBA нужны для обработки данных. Эти данные должны где-то храниться. Вы скажете, так вот же, все нужные для обработки данные хранятся на листе таблицы эксель. Да, они там хранятся и вобщем-то можно из макроса напрямую обращаться к значениям ячеек, но делать этого не рекомендую. И вот вам первое правило, которое нужно всегда соблюдать при написании макросов:

Правило: Никогда не оперируйте в макросе данными напрямую из ячеек

Что будет, если не следовать этому правилу?
-Время выполнения макросов сильно увеличится. Причем это будет достаточно ощутимо и выражаться в минутах, а иногда и в часах!
Почему так?
Потому что при обработке файлов с большим количеством данных, например в несколько сотен тысяч строк, макросу придется обратиться к каждой ячейкам каждой строки персонально. Это займет много времени.
Для хранения данных, которыми будете оперировать в макросе используйте переменные. Так же в переменных будут записываться значения "служебных" и вспомогательных величин, таких как счетчики циклов, метки и так далее.

Переменная - область памяти компьютера, которая имеет свое собственное имя. Именно в таких областях памяти (в переменных) и нужно хранить все используемые данные. Данные, которые записаны в переменную называются - значениями переменной.


Типы данных в VBA
Тип данных переменной показывает каким образом надо хранить записываемые в нее данные и сколько необходимо выделить для переменной памяти. Поэтому, если вам нужно экономить ресурсы памяти, объявляйте переменные.
Основные типы данных

Тип данныхКоличество байт резервируетсяДиапазон значений
Byte10-255
Boolean2True или False
Integer2от -32768 до 32767
Long4от -2147483648 до 2147483647
Double (отрицательные)8-1.79769313486232E308 to -4.94065645841247E-324
Double (положительные)84.94065645841247E-324 to 1.79769313486232E308
Currency8-922,337,203,685,477.5808 to 922,337,203,685,477.5807
Date1с 1/1/100 до 12/31/9999
String10 + длина строкиот 0 до ~ 2 млрд символов
Object4Любая ссылка на объект
Variantзависит от типалюбой тип данных

Для объявления переменной нужно выбирать самый оптимальный тип данных - в котором используется меньшее количество байтов, но достаточный для записи максимальных значений.


Объявление переменных
Многие языки программирования строго типизированные, т.е. обязательно нужно объявлять переменную и ее тип данных. В VBA же переменную можно вообще не объявлять, а просто присвоить ей значение. Переменная будет создана и иметь тип данных, которые ей присваиваются. Но хорошим стилем программирования считается все же написание кода с объявлением переменных, к тому же это помогает оптимизировать объемы выделяемой на выполнение макроса памяти, а также скорость выполнения.
Чтобы не забывать и сделать переменные обязательными для объявления, нужно в модуле написать в самом верху, над всеми подпрограммами

Option Explicit

Объявление переменной всегда начинается с ключевого слова Dim, далее идет имя переменной.
Имя переменной всегда должно начинаться с буквы. Существуют зарезервированные слова, которые не могут быть использованы в качестве имени переменной. Например, переменную нельзя назвать sub, потому что это ключевое слово для объявления подпрограммы (см. предыдущий урок).
О том, что слово невозможно использовать в качестве имени переменной редактор VBE вам сообщит.
Затем идет ключевое слово as и указывается тип переменной.

Пример:

Dim a as integer - объявили переменную а типа integer (целое число)
Dim txt as string - объявили переменную txt типа string (текстовую)


Присваивание значений переменным в VBA
Присваивание значения переменной, по сути, означает запись в область памяти с указанным именем, указанного значения. Присваивание записывается с помощью знака равенства. Имя переменной указывается слева от знака равенства, а значение - справа.
Например:
a = 5
txt="Пример"

Давайте в заключении напишем два макроса. В одном переменные будут объявлены, а в другом нет. А в итоге выведем сообщение показывающее время выполнения макроса. Это будет хорошим примером, демонстрирующим важность объявления переменных. В самом коде пока разбираться не нужно, это просто пример для демонстрации времени выполнения.
Первый вариант макроса -без объявления переменных. Переменным сразу присваиваются значения.

Sub Test()
  StartTime = Timer
  a = 0
  b = 0
  For i = 1 To 100000000
    a = a + 1
    b = b + 1
  Next i
  EndTIme = Timer
  MsgBox Format(EndTIme - StartTime, "0.0")
End Sub

Выполнился за 6,6 секунд

Второй вариант - с использованием объявления переменных.
Sub Test()
  Dim a As Long
  Dim b As Long
  Dim StartTime As Date
  Dim EndTIme As Date
  Dim i As Long
  StartTime = Timer
  a = 0
  b = 0
  For i = 1 To 100000000
    a = a + 1
    b = b + 1
  Next i
  EndTIme = Timer
  MsgBox Format(EndTIme - StartTime, "0.0")
End Sub

Время выполнения 1,5 секунды.

Преимущество второго варианта очевидно. Делайте вывод и старайтесь всегда объявлять переменные.

excelanaliselessonобразованиеvba
69
492.047 GOLOS
0
В избранное
analise
VBA программист | Анализ данных | Статистика | Макросы Заказать макрос, автоматизацию Excel - vba@itroyal.ru
69
0

Зарегистрируйтесь, чтобы проголосовать за пост или написать комментарий

Авторы получают вознаграждение, когда пользователи голосуют за их посты. Голосующие читатели также получают вознаграждение за свои голоса.

Зарегистрироваться
Комментарии (2)
Сортировать по:
Сначала старые