analise: VBA Excel. Урок 3. Переменные. Типы данных. [3803717]


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

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

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

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


Типы данных в VBA
Тип данных переменной показывает каким образом надо хранить записываемые в нее данные и сколько необходимо выделить для переменной памяти. Поэтому, если вам нужно экономить ресурсы памяти, объявляйте переменные.
Основные типы данных
Тип данных Количество байт резервируется Диапазон значений
Byte 1 0-255
Boolean 2 True или False
Integer 2 от -32768 до 32767
Long 4 от -2147483648 до 2147483647
Double (отрицательные) 8 -1.79769313486232E308 to -4.94065645841247E-324
Double (положительные) 8 4.94065645841247E-324 to 1.79769313486232E308
Currency 8 -922,337,203,685,477.5808 to 922,337,203,685,477.5807
Date 1 с 1/1/100 до 12/31/9999
String 10 + длина строки от 0 до ~ 2 млрд символов
Object 4 Любая ссылка на объект
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 секунды.


Оригинал поста создан 27-02-2017 17:15:33 UTC


3803704 Странный день
3803717 VBA Excel. Урок 3. Переменные. Типы данных.
3803928 Заполните профиль, точку A и B
3803936 Заполните профиль, точку A и B
3803942 Трейдинг. Введение. Заработок
3803943 Долгие деньги
3803993 Первые дни ЦЕХа
3804071 Заполните профиль, точку A и B
3804081 6 способов собрать денег на путешествие. Шутливый очерк (впрочем, для кого как...)
3804190 Святой слесарь Потапов...
3804294 #Начало Пути ( 27.02.2017)
3804331 Отчет за день 27.02.2017
3804351 День 2й - разогревочный старт
3804394 Евросоюз вводит безвизовый режим с Грузией.
3804462 Заполните профиль, точку A и B

Прежде чем писать комментарий прочитайте О ПРОЕКТЕ
Поддержите проект донатом!


Comments 0