ВГОРУ

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

YouLibreCalc for Excel logo

На попередньому уроці ми розглядали змінні, в які можна записувати певні дані, проте вони не можуть містити більше одного значення. Щоби обійти це обмеження, в 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