Масиви у Visual Basic for Application

Масиви у Visual Basic for Application — це структури, які зазвичай зберігають набори пов’язаних змінних одного типу. Доступ до елементів масиву здійснюється за їх числовим індексом.

Наприклад, є команда з 20 осіб, імена яких потрібно зберегти для подальшого використання в коді VBA. Можна просто оголосити 20 змінних для кожного імені, ось так:

Dim Team_Member1 як рядок Dim Team_Member2 як рядок ... Dim Team_Member20 як рядок

Але ви можете використати набагато простіший і організованіший спосіб – зберегти список імен членів команди в масиві з 20 змінних, наприклад рядок:

Dim TeamMembers(1 To 20) як рядок

У наведеному вище рядку ми оголосили масив. Тепер запишемо значення для кожного його елемента, як це:

TeamMembers(1) = "Джон Сміт"

Додаткова перевага зберігання даних у масиві, порівняно з використанням окремих змінних, стає очевидною, коли виникає необхідність виконати однакову дію над кожним елементом масиву. Якби імена членів команди зберігалися в 20 окремих змінних, тоді потрібно було б писати 20 рядків коду кожного разу, щоб виконати ту саму дію для кожного з них. Однак, якщо імена зберігаються в масиві, ви можете виконати потрібну дію з кожним із них за допомогою простого циклу.

Як це працює, показано нижче на прикладі коду, який послідовно друкує імена кожного члена команди в комірках стовпців. A активний аркуш Excel.

For i = 1 to 20 Cells(i,1).Value = TeamMembers(i) Next i

Очевидно, що робота з масивом, який зберігає 20 імен, набагато менш громіздка і точніша, ніж використання 20 окремих змінних. Але що, якщо цих імен не 20, а 1000? А якщо, крім того, потрібно вести окремо прізвища та по батькові?! Зрозуміло, що скоро стане абсолютно неможливо обробляти такий обсяг даних у коді VBA без допомоги масиву.

Багатовимірні масиви в Excel Visual Basic

Масиви Visual Basic, розглянуті вище, вважаються одновимірними. Це означає, що вони зберігають простий список імен. Однак масиви можуть мати декілька вимірів. Наприклад, двовимірний масив можна порівняти з сіткою значень.

Припустімо, ви хочете зберегти щоденні показники продажів за січень для 5 різних команд. Для цього знадобиться двовимірний масив, що складається з 5 наборів показників за 31 день. Давайте оголосимо масив таким чином:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) Як валюта

Для доступу до елементів масиву Цифри_продажів січня, потрібно використовувати два індекси, що вказують день місяця та номер команди. Наприклад, адреса елемента, що містить показники продажів для 2-ой команд для 15 тис Січень буде записаний так:

Jan_Sales_Figures(15, 2)

Таким же чином ви можете оголосити масив з 3 або більше вимірами – просто додайте додаткові виміри до оголошення масиву та використовуйте додаткові індекси для посилань на елементи цього масиву.

Оголошення масивів у Excel Visual Basic

Раніше в цій статті ми вже розглядали кілька прикладів оголошення масивів у VBA, але ця тема заслуговує більш детального розгляду. Як показано, одновимірний масив можна оголосити так:

Dim TeamMembers(1 To 20) як рядок

Така декларація повідомляє компілятору VBA, що масив Team_Members складається з 20 змінних, до яких можна отримати доступ за індексами від 1 до 20. Однак ми можемо подумати про нумерацію змінних нашого масиву від 0 до 19, у цьому випадку масив слід оголосити так:

Dim TeamMembers(0 To 19) як рядок

Насправді за замовчуванням нумерація елементів масиву починається з 0, а в оголошенні масиву початковий індекс може взагалі не вказуватися, наприклад:

Dim TeamMembers(19) як рядок

Компілятор VBA розглядатиме такий запис як оголошення масиву з 20 елементів з індексами від 0 до 19.

Ці ж правила застосовуються під час оголошення багатовимірних масивів Visual Basic. Як уже було показано в одному з прикладів, при оголошенні двовимірного масиву індекси його розмірності розділяються комою:

Dim Jan_Sales_Figures(1 To 31, 1 To 5) Як валюта

Однак, якщо ви не вкажете початковий індекс для обох вимірів масиву та оголосите його так:

Dim Jan_Sales_Figures(31, 5) як валюта

тоді цей запис буде розглядатися як двовимірний масив, перший вимір якого містить 32 елементи з індексами від 0 до 31, а другий вимір масиву містить 6 елементів з індексами від 0 до 5.

Dynamic arrays

Усі масиви в наведених вище прикладах мають фіксовану кількість розмірів. Однак у багатьох випадках ми не знаємо заздалегідь, якого розміру має бути наш масив. Ми можемо вийти із ситуації, оголосивши величезний масив, розмір якого неодмінно буде більше необхідного для нашої задачі. Але таке рішення зажадає багато додаткової пам'яті і може уповільнити роботу програми. Є краще рішення. Ми можемо використовувати динамічний масив – це масив, розмір якого можна встановлювати та змінювати будь-яку кількість разів під час виконання макросу.

Динамічний масив оголошується з порожніми дужками, ось так:

Dim Team_Members() як рядок

Далі вам потрібно буде оголосити розмірність масиву під час виконання коду за допомогою виразу ReDim:

ReDim Team_Members (від 1 до 20)

І якщо під час виконання коду вам потрібно буде знову змінити розмір масиву, то ви можете знову скористатися виразом ReDim:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Майте на увазі, що зміна розміру динамічного масиву таким чином призведе до втрати всіх значень, що зберігаються в масиві. Щоб зберегти дані, які вже є в масиві, потрібно використати ключове слово Заповідникяк показано нижче:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

На жаль, ключове слово Заповідник можна використовувати лише для зміни верхньої межі розмірності масиву. Нижня межа масиву не може бути змінена таким чином. Крім того, якщо масив має кілька вимірів, то використовується ключове слово Заповідник, можна змінити розмір лише останнього розміру масиву.

залишити коментар