excel vba array array methods with examples
Цей підручник пояснить VBA Array, різні типи масивів, варіанти масивів та методи масивів за допомогою прикладів програмування:
Звичайна змінна VBA - це місце, яке зберігає значення окремих даних. Він має відношення 1 до 1, тобто 1 змінна для 1 значення.
А тепер уявіть, як ви зберігаєте кілька значень одного типу. Замість того, щоб створювати кілька змінних, ви можете просто створити одну змінну і зберігати всі однакові типи значень. Ця змінна називається ARRAY.
=> Завітайте сюди, щоб побачити навчальну серію VBA для всіх
ігрові окуляри для віртуальної реальності
У цьому посібнику ви дізнаєтесь, що таке масив VBA, одновимірні та двовимірні масиви, а також різні типи масивів, такі як фіксований та динамічний. Ми також будемо розуміти різні методи масивів, які використовуються у VBA.
Що ви дізнаєтесь:
Масив VBA
Масиви - це особливий тип змінної, яка може зберігати кілька значень одного типу даних.
Наприклад, якщо у вас є імена 100 співробітників, то замість того, щоб створювати 100 змінних рядка типу даних, ви можете просто створити одну змінну масиву типу string і призначити 100 значень тій самій змінній масиву.
Одновимірний масив
Масив, що містить усі елементи в одному рядку або в одному стовпці, називається одновимірним масивом. Перерахування імен усіх учнів класу в одному стовпці є прикладом одновимірного масиву. Це оголошено, як показано нижче.
Ім'я масиву незмінне (від нижнього до верхнього) як тип даних
Існує кілька способів оголошення масиву. Нижче наведено кілька прикладів.
Приклад:
# 1) Затемнити MyArrayExample (від 0 до 3) як ціле число
Створює масив з розташуванням 0,1,2,3, який прийматиме цілі числа.
# 2) Dim MyArray2 (3) як рядок
За замовчуванням від 0 до 3 і створює масив з розташуванням 0,1,2,3, який прийматиме значення рядків.
# 3) Затемнити MyArray2 (від 13 до 15) як подвійний
Створює масив, починаючи з 13, тобто 13, 14 і 15, і приймає значення Double. Ми згадали нижню межу як 13, тому масив почне розподіляти значення з місця 13, а не з 0.
Давайте створимо простий код і зрозуміємо всі 3 способи оголошення масиву.
Примітка: Для написання коду VB Відкрийте Microsoft Excel (підтримуються версії Excel 2007, 2010, 2013, 2016, 2019). Перейдіть до Вкладка розробника -> Visual Basic (Або скористайтеся комбінацією клавіш Alt + F11). У редакторі VB натисніть Вставити -> Модуль і вставте наведений нижче код.
Розглянемо наведену нижче процедуру, що показує різні типи декларацій.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = 'Jan' firstQuarter(1) = 'Feb' firstQuarter(2) = 'Mar' MsgBox 'First Quarter in calendar ' & ' ' & firstQuarter(0) & ' ' & firstQuarter(1) & ' ' & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
Натисніть F5 або натисніть кнопку запуску на панелі інструментів, щоб виконати код.
Регулярна змінна проти змінної масиву
Тепер ми знаємо, як працює одновимірний масив. Тож давайте хвилинку зрозуміємо, чому масиви настільки важливі в мовах програмування.
Припустимо, що вам потрібно ввести заробітну плату 5 працівників. Для того, щоб досягти цього за допомогою звичайної змінної, вам потрібно створити 5 змінних.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range('A' & 2).Value Emp2 = shet.Range('A' & 3).Value Emp3 = shet.Range('A' & 4).Value Emp4 = shet.Range('A' & 5).Value Emp5 = shet.Range('A' & 6).Value ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Тепер давайте побудуємо той самий код, використовуючи змінну Array.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range('A' & i).Value Debug.Print Employee(i) Next i End Sub
Тут ми щойно використали одну змінну масиву, яка буде зберігати всі імена працівників. Припустимо, вам потрібно додати ще 100 імен співробітників, тоді вам просто потрібно змінити розмір масиву і не потрібно створювати нову змінну.
Це зменшить кількість рядків у коді і тим самим зробить його легко зрозумілим та читабельним.
Двовимірний масив
Двовимірний масив має 2 індекси - перший індекс представлятиме рядки, а другий індекс - стовпець. Він має кілька рядків і стовпців і зазвичай представлений у форматі таблиці.
Декларація двомісного масиву така:
Ім'я масиву масиву (FirstIndex - LastIndex, FirstIndex - LastIndex) як тип даних.
Розглянемо приклад зберігання оцінок 2 учнів, отриманих з 3 предметів. Отже, ми створимо двовимірний масив, який займає 2 рядки та 3 стовпці.
Ми почнемо масив від рядка 1 до рядка 2 і стовпця 1 до стовпця 3.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
Натисніть F5 або натисніть кнопку запуску на панелі інструментів, щоб виконати код.
Рядок 2 і Стовпець 2
Рядок 1 і Стовпець 3
Виправлені масиви
Фіксовані масиви, які також називаються статичними, мають фіксовану нижню межу та верхню межу, і цей розмір не можна змінювати під час виконання. Розмір масиву вказується під час оголошення в дужках. Усі наведені вище приклади є фіксованими масивами, оскільки ми згадували про розмір його під час оголошення.
Фіксовані масиви зазвичай використовуються, коли ви впевнені у розмірі масиву. Наприклад, кількість днів у тижні, ви можете створити масив з нижньою межею 0 і верхньою межею 6 і бути впевненим, що ви ніколи не зміните його розмір.
Динамічні масиви
Динамічні масиви дозволяють нам змінювати розмір масиву під час роботи. Вони корисні, коли ви не впевнені в розмірі масиву. Припустимо, під час вступу до коледжу ви не можете бути впевнені, скільки студентів насправді отримає вступ, тому ви не можете визначити розмір під час оформлення або декларації.
Оголошення динамічного масиву подібне до статичного масиву з порожніми дужками.
Тьмяний працівник () як рядок
REDIM
Коли ми хочемо змінити розмір, який нам потрібно використовувати REDIM , потрібно зазначити, що нижню межу змінити не можна, ми можемо змінити лише верхню межу масиву.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
Тепер ми знаємо, що можемо змінювати розмір масиву під час виконання, отже, ми можемо використовувати оператор ReDim, коли нам потрібно збільшити вбивство масиву. Спробуємо ще раз збільшити розмір масиву та додати нове ім’я студента.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Ви могли б помітити, що результат не відображав імен студентів, доданих раніше, він дає нульове значення. Це тому, що оператор Redim створить новий масив із новим розміром і знищить старі значення.
Заповідник ReDim
Оператор Represerve допомагає нам подолати обмеження ReDim, зберігаючи старі значення і тим самим збільшуючи розмір масиву.
Давайте перепишемо наведений вище код за допомогою ReDim Preserve.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Оскільки ми використовували ключове слово збереження, раніше введені значення не втрачаються, і нове значення додано успішно.
Варіантний масив
Дотепер ми бачили масив, що приймає значення одного типу. Тепер оголосимо масив як варіант і збережемо різні типи даних, такі як String, Date, Long, Integer, в одному масиві.
Приклад:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = 'Vikram Vikrant' arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = '06-09-1972' MsgBox 'Details of person ' & arrayData(0) & ' is ' & ' Phone No ' & arrayData(1) & ' ,Id ' & arrayData(2) & ' ,DOB ' & arrayData(3) End Sub
Методи масиву VBA
У масивах VBA існує кілька методів, які допоможуть нам виконувати різні функції, як зазначено нижче.
Сл. Ні | Ім'я | Синтаксис | Опис |
---|---|---|---|
7 | Приєднуйтесь | Приєднатися (sourcearray, (роздільник)) | Об’єднує декілька підрядків у масиві та повертає значення рядка. |
1 | Масив | Масив (шахрайський) | Перетворює звичайний варіант змінна в масив. |
два | Стерти | Стерти ім'я масиву | Використовується для реінціалізації масиву фіксованого розміру і звільняє пам’ять для динамічного масиву. |
3 | IsArray | IsArray (ім'я змінної) | Визначає, чи є змінна масивом. |
4 | Lbound | LBound (ArrayName, (Dimension)) | Повертає найнижчий індекс масиву. |
5 | Відхилений | UBound (ArrayName, (Dimension)) | Повертає найвищий індекс масиву. |
6 | Спліт | Розділити (вираз, (роздільник, (обмеження, (порівняння)))) | Він ділить рядок на кілька підрядків і повертає нульовий масив. |
8 | Фільтр | Фільтр (sourcearray, match, (включити, (порівняти))) | Фільтр дозволить нам шукати в вказане збіг з масиву. |
Давайте обговоримо кожен із них детально на прикладі.
# 1) Масив
Давайте оголосимо звичайну змінну варіанта та використаємо її як масив. Коли ви хочете змінити звичайну змінну варіанта на масив, нам потрібно використовувати Масив функція, як показано в прикладі нижче.
Функції масиву приймають аргумент, що містить значення, розділені комами. Ці значення присвоюються як елемент масиву.
Sub variantArray() Dim varData As Variant varData = Array('Mon Bel', '+61 112334123', 567, '06-09-1972') MsgBox 'Details of person ' & varData(0) & ' is ' & ' Phone No ' & varData(1) & ' ,Id ' & varData(2) & ' ,DOB ' & varData(3) End Sub
Вам потрібно ідентифікувати змінну масиву за допомогою індексу, отже, у наведеному вище прикладі значення отримуються як varData (0) varData (2) varData (3).
# 2) Стерти
Ця функція видалить усі значення, введені для масиву фіксованого розміру, і звільнить простір пам'яті для динамічного масиву.
Синтаксис: Стерти ім’я масиву
Erase має різну поведінку для різних типів даних, як зазначено нижче.
- Для фіксованого числа: Усі значення скидаються до нуля.
- Для фіксованого типу даних рядка: Усі значення скидаються до нульової довжини.
- Для динамічного масиву: Звільняє пам’ять, що використовується масивом.
Приклад:
який найкращий додаток для завантаження mp3 для android
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = 'Erase Function' Dim DynaArray() ReDim DynaArray(3) MsgBox ' Values before Erase ' & (NumArray(0)) & ',' & (decArray(1)) & ' , ' & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
Результат перед використанням функції стирання
Результат після використання Erase
# 3) IsArray
Ця функція використовується для визначення того, чи є дана вхідна змінна масивом чи ні. Він повертає true, якщо введена змінна true, інакше повертає false.
Синтаксис: IsArray (ім'я змінної)
Приклад:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array('Jan', 'Feb', 'Mar') arr2 = '12345' MsgBox ('Is arr1 an Array : ' & IsArray(arr1)) MsgBox ('Is arr2 an Array : ' & IsArray(arr2)) End
Результат від першого Msgbox
Результат з другого msgbox
# 4) Lbound
Він повертає найнижчий індекс масиву, вказаний як аргумент для функції Lbound.
Синтаксис: LBound (ArrayName, (Dimension))
ArrayName - це ім'я масиву.
Dimension - це необов’язкове ціле значення, якщо масив має кілька вимірів, тоді ви можете вказати, до якого виміру ви хочете визначити Lbound.
Приклад:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 5) Не пов'язаний
Він повертає верхній індекс масиву, вказаний як аргумент у функції Ubound.
Синтаксис: UBound (ArrayName, (Dimension))
ArrayName - це ім'я масиву.
Вимір - це необов’язкове ціле число, якщо масив має кілька вимірів, тоді ви можете вказати, для якого виміру ви хочете визначити Зв’язаний.
Приклад:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 6) Розкол
Він повертає масив із кількістю підрядків, отриманих із цілого даного рядка.
Синтаксис: розділити (вираз, (роздільник, (обмеження, (порівняти))))
- Вираз: Це цілий рядок, який буде використовуватися для створення підрядків.
- Розділювач: Використовуючи вказаний роздільник, буде створено підрядки. Якщо про це не говорити, тоді пробіл вважається роздільником.
- Обмеження: Кількість підрядків, які потрібно повернути.
- Порівняйте: Після створення підрядка ви можете використовувати різні варіанти порівняння для перевірки результату.
Приклад: У наведеному нижче прикладі ми використовуємо роздільник як - і обмежуємо як 3.
Отже, функція split розділить весь рядок на підрядок на основі роздільника. Але ми також згадали межу, оскільки 3, тому підрядки не будуть утворюватися після межі 3. Таким чином, останній роздільник - буде пропущено.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = 'This is the example for-VBA-Split-Function' Result = Split(MyString, '-',3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
# 7) Приєднуйтесь
Це лише зворотний результат розбиття, Join створить один рядок, об’єднавши кілька підрядків.
Синтаксис: Приєднання (sourcearray, (роздільник))
Джерело масиву: Одновимірний масив рядків, які ви хочете об’єднати в одну.
Розділювач: Вказаний роздільник буде додаватися після кожного рядка під час приєднання.
Приклад:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = 'D:' dirarray(1) = 'SoftwareTestingHelp' dirarray(2) = 'Arrays' Result = Join(dirarray, '') MsgBox 'Date after joining ' & Result End Sub
Всі 3 значення об'єднуються і ставиться між кожним словом, як ми вже згадували як роздільник.
# 8) Фільтр
Фільтр дозволить нам шукати вказане збіг з масиву. На основі критеріїв фільтра повертається підмножина масиву рядків.
Синтаксис: Фільтр (sourcearray, match, (включити, (порівняти)))
Приклад:
Sub filterExample() Dim Mystring As Variant Mystring = Array('Software Testing', 'Testing help', 'Software help') filterString = Filter(Mystring, 'help') MsgBox 'Found ' & UBound(Mystring) - LBound(Mystring) + 1 & ' words matching the criteria ' End Sub
У цьому прикладі буде здійснено пошук слова “help” у всьому рядку масиву за допомогою функції фільтра.
Часті запитання
Q # 1) Як отримати довжину масиву у VBA?
Відповідь: Щоб отримати довжину масиву, ми використовуємо функцію Ubound. Ця функція дасть нам верхній індекс вказаного масиву.
Q # 2) Як оголосити масив у VBA?
Відповідь: Одновимірний масив оголошено, як показано нижче.
Ім'я масиву незмінне (від нижнього до верхнього) як тип даних
Приклад: Затемнити Myarray (від 0 до 2) як ціле число
Оголошується двовимірний масив, як показано нижче.
Ім'я масиву масиву (FirstIndex - LastIndex, FirstIndex - LastIndex) як тип даних.
Приклад: Помітні позначки (від 1 до 3, від 0 до 2) як ціле число
Q # 3) Як перетворити Range в Array?
Відповідь: Ми можемо використовувати функцію Transpose для перетворення діапазону в масив. Цей код створить Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q # 4) Що таке варіант масиву у VBA?
Відповідь: Варіантний масив приймає всі типи типів даних для свого індексу, тобто ви можете зберігати різні типи значень в одному масиві.
Приклад:
Dim arrayData (3) як варіант
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Q # 5) Що таке твердження про опцію?
Відповідь: Це використовується для оголошення нижнього індексу масиву і використовується при запуску модуля. За замовчуванням нижній нижній індекс дорівнює 0, якщо ви оголосите Option Base 1 на рівні модуля, тоді для всіх масивів нижчим нижчим індексом буде 1.
Висновок
У цьому підручнику ми дізналися, як масиви використовуються у VBA, і побачили, як масиви відрізняються від звичайної змінної. Ми дослідили одновимірні та двовимірні масиви на прикладах. Ми також обговорили фіксовані та динамічні масиви.
Способи зміни розміру масиву під час виконання, а також збереження значень за допомогою redimserve були обговорені на прикладах. Нарешті, ми вивчили методи Array, які допоможуть нам виконати кілька операцій.
=> Перевірте ВСІ підручники VBA тут
Рекомендована література
- Підручник з VBA - Вступ до VBA в
- Типи даних VBA - числові та нечислові типи даних у VBA
- Змінні та варіанти VBA, явні у VBA
- Зворотній масив у Java - 3 методи з прикладами
- Підручник з довжини масиву Java із прикладами коду
- Нерівний масив у Java - Підручник із прикладами
- Типи даних масиву - int Array, Double array, Array of Strings тощо.
- String Array C ++: Впровадження та представлення на прикладах