VBA - Оголошення (Dim), створення та ініціалізація змінної масиву

Цей підручник демонструє, як оголошувати (Dim), створювати та ініціалізувати змінні масиву у VBA

Що таке змінна масиву VBA?

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

Ви посилаєтесь на елемент у масиві, використовуючи його номер індексу.

Ви можете оголосити змінну масиву так само, як і будь -яку іншу змінну, використовуючи ключове слово Dim, Static, Public або Private.

Статичні масиви

Існує 2 типи масивів - статичний і динамічний. Статичний масив оголошується із зазначенням розміру, коли ви спочатку оголошуєте масив. Його також називають фіксованим масивом.

1 Затемнити intA (4) як ціле число

Наведений вище масив оголошується за допомогою оператора Dim на рівні процедури або модуля, а розмір масиву - 5, оскільки ми не оголосили значення LBound масиву.

Ні, це не помилка! Розмір масиву - 5, незважаючи на введення 4 у масив. Це пояснюється тим, що індекси масивів автоматично починаються з нуля.

Індекси масивів

Індекси масивів автоматично починаються з нуля, якщо тільки База варіантів 1 оголошено у верхній частині модуля коду.

Якщо База варіантів 1 оголошується, тоді масиви автоматично почнуть з 1.

Однак я вважаю, що оголошення таких змінних таким чином проблематичним. Рецензенти коду можуть не знати про те, що масиви починаються з нуля або з декларації Option Base 1

Натомість я вважаю за краще чітко оголошувати початкове та кінцеве положення масивів:

1 Затемнити intA (від 2 до 5) як ціле число

Зверніть увагу, що коли ви це зробите, ви можете запустити масив з будь -якого числа (не лише з 1 чи 0).

Динамічні масиви

Змінна Dynamic Array - це масив, розмір якого можна змінювати під час виконання. Ви оголошуєте динамічні змінні без розміру.

1 Затемнити intA () як ціле число

Ви можете використовувати оператор ReDim, щоб вказати розмір масиву після створення масиву.

1 ReDim intA (2)

Ви можете будь -коли змінити розмір динамічного масиву. Однак при використанні оператора ReDim усі наявні значення стираються. Щоб зберегти існуючі значення масиву, використовуйте Заповідник ReDim замість цього.

1 Захист ReDim intA (2)

Ви можете оголосити динамічний масив на рівні процедури, модуля або глобального рівня, але ви можете використовувати лише оператор ReDim у межах процедури.

Варіантні масиви

Варіантні масиви - це динамічні масиви, з якими легше працювати.

1 Dim varNames ()

Зверніть увагу, що вам не потрібно вказувати тип даних (передбачається, що це варіант) або розмір масиву.

Як ми побачимо нижче, ви можете ініціалізувати варіанти масивів за допомогою функції Array (не потрібно спочатку змінювати розміри масивів)!

Заявити модуль та загальнодоступні масиви

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

1234 Sub StaticArray ()'оголошуємо масив зі значенням LBound 1 і UBound 4Dim IntA (1 до 4) як ціле числоEnd Sub

Але вони також можуть бути оголошені на модульному або глобальному рівні.

1234567 Опція явна'оголошуємо масив зі значенням LBound 1 і UBound 4Dim IntA (1 до 4) як ціле числоSub StaticArray ()End Sub

У цьому прикладі змінну масиву можна викликати будь -де в цьому модулі коду. Замість цього ви можете оголосити загальнодоступний масив, який можна використовувати у вашому проекті VBA (див. Наступний розділ).

Оголошення публічного масиву

Ви оголошуєте публічний статичний масив так само, як і загальнодоступну змінну.

1 Загальнодоступні strNames (3) як String

Ця декларація повинна знаходитись у верхній частині вашого модуля, нижче Option Explicit. Потім його можна використовувати у вашому проекті VBA у будь -якому модулі чи процедурі.

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

Ініціалізувати масиви

Ви можете призначити значення статичному масиву таким чином.

1234567891011 Sub StaticArray ()'оголошуємо масив зі значенням LBound 1 і UBound 4Dim IntA (1 до 4) як ціле число'ініціалізувати масивIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'показати результат положення 2 масиву у безпосередньому вікніНалагодження друку IntA (2)End Sub

Якщо ви виконаєте описану вище процедуру, значення 20 відобразиться у вікні безпосередньо.

Ви також можете присвоїти значення динамічному масиву таким же чином

12345678910111213 Піддинамічний масив ()'оголошують динамічний масив, опускаючи зв'язані значенняDim IntA () як Integer'ініціалізувати масивReDim IntA (від 1 до 4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'показати результат положення 2 масиву у безпосередньому вікніНалагодження. ДрукIntA (2)End Sub

Функція масиву

Однак, лише з варіантом масиву, ви можете використовувати функцію масиву, що може бути простіше, ніж використання стандартного методу.

12 'заповнити масивintA () = Масив (10, 20, 30, 40)

Заповнити масив за допомогою циклу

Ви також можете заповнювати масиви, прокручуючи діапазон клітинок у Excel

1234567891011121314151617 ПідтестDynamicArrayFromExcel ()'оголосити масивDim strNames () Як рядок'оголосити ціле число для підрахунку рядків у діапазоніDim n як ціле число'оголосити ціле число для циклуDim i як ціле число'підрахувати рядки в діапазоніn = Діапазон ("A1", Діапазон ("A1"). Кінець (xlDown)). Rows.Count'зменшити масив до кількості рядків у діапазоні.ReDim strNames (n)Для i = 0 до nstrNames (i) = Діапазон ("A1"). Зсув (i + 1, 0)Далі i'показати значення в масивіMsgBox Join (strNames ())End Sub

Повторно ініціалізувати масиви

Ви можете повторно ініціалізувати свій масив на будь-якому етапі коду, але тоді ви втратите початкове значення, що міститься в цій позиції вашого масиву.

1234567891011121314 Sub StaticArray ()'оголошуємо масив зі значенням LBound 1 і UBound 4Dim IntA (1 до 4) як ціле число'ініціалізувати масивIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'показати результат положення 2 масиву у безпосередньому вікніНалагодження друку IntA (2)'знову ініціалізувати масивintA (2) = 200Налагодження друку IntA (2)End Sub

У наведеному вище прикладі масив Static зберігатиме всі значення, крім значення у позиції 2 - це значення зміниться на 200.

Використання ReDim

Якщо ви використовуєте динамічний масив, оператор ReDim використовується для встановлення розміру вашого масиву. Ви можете використовувати оператор ReDim згодом у своєму коді, щоб змінити розмір масиву стільки разів, скільки потрібно. Рядок коду нижче повторно ініціалізує масив intA до розміру 2 (Пам’ятайте - індекс масиву починається з 0!)

1 ReDim intA (1) як ціле число

Отже, код, включаючи оператор ReDim, виглядатиме так, як показано нижче.

1234567891011121314151617 Sub TestDynamicArray ()'оголосити масивDim intA () як ціле числоReDim intA (2)'заповніть масив числамиintA (0) = 2intA (1) = 5intA (2) = 9'показати номер у позиції 1Налаштування друку intA (1)'зменшіть масив, щоб змінити розмірReDim intA (3)intA (0) = 6intA (1) = 8'цього разу покажи номер у позиції 1Налаштування друку intA (1)End Sub

Якщо ви запустите описану вище процедуру, значення 5 відображатиметься у безпосередньому вікні, а потім буде показано значення 8, як тільки ми змінимо розмір масиву за допомогою ReDim і заповнимо його знову. Однак, оскільки ми не заповнили IntA (2), і ми не використовували Re-Dim Preserve, значення в цій позиції в масиві буде видалено, і обидві позиції 3 і 4 в масиві будуть нульовими.

Використання ReDim Preserve

Якщо ми використовуємо ReDim Preserve, він зберігатиме вихідні значення, що містяться в масиві.

1234567891011121314151617 Sub TestDynamicArray ()'оголосити масивDim intA () як ціле числоReDim intA (2)'заповніть масив числамиintA (0) = 2intA (1) = 5intA (2) = 9'Покажіть номер у позиції 2Налаштування друку intA (2)'зменшити масивReDim intA (3)intA (0) = 6intA (1) = 8'знову покажіть номер у позиції 2Налаштування друку intA (2)End Sub

В обох вікнах повідомлень, відображених вище, число 9 відображатиметься, оскільки оператор ReDim Preserve зберігає це значення в цьому положенні.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave