VBA-Урок 6.2. Tипы данных (Variables)

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

Приведем несколько примеров различных массивов:

Sub variables()
'Пример декларирования переменной
Dim var1 As String
   
'Пример декларирования 1-но мерного массива
Dim array1(4) As String
   
'Пример декларирования 2-х мерного массива
Dim array2(4, 3) As String
   
'Пример декларирования 3-х мерного массива
Dim array3(4, 3, 2) As String
End Sub

Одномерный массив

Dim array1(4) As String

Одномерный массив можно представить как таблицу, которая состоит из одного столбца. Массив array1 (4) является одномерным, в который можно поместить 5 записей. Почему 5? Потому, что номера записей в массиве начинаются с нуля (0, 1, 2, 3, 4).

Теперь давайте рассмотрим 2-х мерный массив:

Dim array2(4, 3) As String

Это уже будет выглядеть, как таблица с 5 строками и 4 столбцами:

'Присвоение значений для закрашенных ячеек
array2(0, 0) = "Значение в красной ячейке"
array2(4, 1) = "Значение в зеленой ячейке"
array2(2, 3) = "Значение в синей ячейке"

Константы

Как и переменные, константы могут использоваться для сохранения значений, однако отличие в том, что значения не могут изменяться. Мы можем добавить константу, чтобы избежать повторения значение, например,13.14:

Sub const_example()
    Cells(1, 1) = Cells(1, 2) * 13.14
    Cells(2, 1) = Cells(2, 2) * 13.14
    Cells(3, 1) = Cells(3, 2) * 13.14
    Cells(4, 1) = Cells(4, 2) * 13.14
    Cells(5, 1) = Cells(5, 2) * 13.14
End Sub

Это делает код легче для восприятия и редактирования. Также позволяет достаточно просто изменить само значение константы:

Sub const_example()
   'Декларирование константы + присвоение значения
    Const ANNUAL_RATE As Double = 13.14
   
    Cells(1, 1) = Cells(1, 2) * ANNUAL_RATE
    Cells(2, 1) = Cells(2, 2) * ANNUAL_RATE
    Cells(3, 1) = Cells(3, 2) * ANNUAL_RATE
    Cells(4, 1) = Cells(4, 2) * ANNUAL_RATE
    Cells(5, 1) = Cells(5, 2) * ANNUAL_RATE
End Sub

Область видимости переменных

Если переменная декларируется в начале процедуры (Sub), то она может быть использована только в данной процедуре. Значение переменной не будет больше доступно после выполнения процедуры.

Sub procedure1()
   Dim var1 As Integer
   ' => Переменная действительна только в этой процедуре
End Sub

Sub procedure2()
   ' => var1 не может быть использована здесь
End Sub

Для того, чтобы использовать переменную в любой процедуре модуля, нам нужно лишь задекларировать ее в начале модуля. И если вы задекларируете переменную таким образом, она будет доступна вплоть до закрытия робочей книги.

Dim var1 As Integer

Sub procedure1()
   ' => var1 может быть использована здесь
End Sub

Sub procedure2()
   ' => var1 может быть также использована и здесь
End Sub

Если вы захотите использовать одну и ту же переменную во всех модулях книги, стоит только в предыдущем примере заменить Dim на Global:

Global var1 As Integer

Чтобы использовать переменную после выполнения процедуры, в которой она появилась, замените Dim на Static:

Sub procedure1()
    Static var1 As Integer
End Sub

Чтобы использовать значения всех переменных в процедуре, добавьте Static перед Sub:

Static Sub procedure1()
    Dim var1 As Integer
End Sub

Создание собственного типа переменных

Вот краткий пример, как можно создать свой собственный тип:

'Создание типа переменной
Type customers
    last_name As String
    first_name As String
End Type
   
Sub variables()
    'Объявление переменной
    Dim cust1 As customers
   
    'Присвоение значения для cust1
    cust1.last_name = "Smith"
    cust1.first_name = "John"
   
    'Пример использования
    MsgBox cust1.last_name & " " & cust1.first_name
End Sub

Статьи по теме:

  • VBA-Урок 6.1. Типы данных (Variables)
  • VBA-Урок 7.1. Условия (Conditions)