excel vba array array methods with examples
Този урок ще обясни VBA Array, различни типове масиви, варианти и масиви с помощта на примери за програмиране:
Редовната променлива на VBA е държач на място, който съхранява стойността на единични данни. Той има връзка 1 към 1, т.е. 1 променлива за 1 стойност.
Сега си представете съхраняване на множество стойности, които са от един и същи тип. Вместо да създавате множество променливи, можете просто да създадете една променлива и да съхранявате всички едни и същи типове стойности. Тази променлива се нарича ARRAY.
=> Посетете тук, за да видите серията за обучение на VBA за всички
програма за бързо сортиране в c ++
В този урок ще опознаете какво представлява VBA масив, едномерни и двумерни масиви, заедно с различните видове масиви като Fixed и Dynamic. Ще разберем и различни методи на масиви, които се използват във VBA.
Какво ще научите:
VBA масив
Масивите са специален вид променлива, която може да съхранява множество стойности от един и същи тип данни.
Например, ако имате имената на 100 служители, вместо да създавате 100 променливи от тип тип данни, можете просто да създадете една променлива от масив от тип низ и да присвоите 100 стойности на същата променлива на масива.
Едномерен масив
Масив, който има всички елементи в един ред или в една колона, се нарича Едномерен масив. Изброяването на имената на всички ученици в класа в една колона е пример за едномерен масив. Декларира се, както е показано по-долу.
Затъмнено име на масив (от долната към горната) като тип данни
Има множество начини за деклариране на масив. По-долу са дадени няколко примера.
Пример:
# 1) Затъмнете MyArrayExample (0 до 3) като цяло число
Създава масив с местоположение 0,1,2,3, който ще приеме Integer стойности.
# 2) Dim MyArray2 (3) Като низ
По подразбиране е от 0 до 3 и създава масив с местоположение 0,1,2,3, който ще приема String стойности.
# 3) Затъмнете MyArray2 (13 до 15) като двойно
Създава масив, започващ от 13, т.е. 13, 14 и 15, и приема Double стойности. Споменахме долната граница като 13, така че масивът ще започне да разпределя стойности от местоположение 13, а не от 0.
Нека създадем прост код и да разберем всичките 3 начина за деклариране на масив.
Забележка: За писане на VB Code Отворете 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 индекса - първият индекс ще представлява редовете, а вторият индекс ще представлява колоната. Той има множество редове и колони и обикновено се представя в табличен формат.
Декларирането на двумерен масив е както следва:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Като DataType.
Помислете за пример за съхраняване на оценки на 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 Preserve
Изразът 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 | Филтър | Филтър (изходен масив, съвпадение, (включване, (сравняване))) | Филтърът ще ни позволи да търсим в определено съвпадение от масив. |
Нека обсъдим всеки от тях подробно с пример.
# 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 има различно поведение за различните типове данни, както е дадено по-долу.
- За фиксирана цифра: Всички стойности се нулират.
- За тип данни с фиксиран низ: Всички стойности са нулирани.
- За динамичен масив: Освобождава паметта, използвана от масива.
Пример:
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 е името на масива.
Dimension е незадължителната целочислена стойност, ако масивът има множество измерения, тогава можете да посочите коя величина искате да определите Ubound.
Пример:
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. Така последният разделител - ще бъде пропуснат.
пример за тест на junit в java
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
Този пример ще търси думата 'помощ' във всички низове на масив, използвайки функцията за филтриране.
често задавани въпроси
В # 1) Как да получите дължината на масив във VBA?
Отговор: За да получим дължината на масив, използваме функцията Ubound. Тази функция ще ни даде горен индекс на определен масив.
В # 2) Как да декларирам масив във VBA?
Отговор: Едномерният масив се декларира, както е показано по-долу.
Затъмнено име на масив (от долната към горната) като тип данни
Пример: Затъмнете Myarray (0 до 2) като цяло число
Двуизмерен масив се декларира, както е показано по-долу.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Като DataType.
Пример: Затъмнени марки (1 до 3, 0 до 2) като цяло число
В # 3) Как да конвертирате Range в масив?
Отговор: Можем да използваме функцията Транспониране, за да преобразуваме диапазона в масив. Този код ще създаде Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
В # 4) Какво представлява вариантът на масив във VBA?
Отговор: Вариантният масив ще приема всички видове типове данни за своя индекс, т.е.можете да съхранявате различни типове стойности в един масив.
Пример:
Dim arrayData (3) Като вариант
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Въпрос # 5) Какво представлява опцията base statement?
Отговор: Това се използва за деклариране на долния индекс на масив и се използва при стартиране на модул. По подразбиране долният индекс е 0, ако декларирате Option Base 1 на ниво модул, тогава за всички масиви долният индекс по подразбиране ще бъде 1.
Заключение
В този урок научихме как се използват масиви във VBA и видяхме как масивите се различават от обикновената променлива. Изследвахме едномерни и двумерни масиви с примери. Също така обсъдихме фиксирани и динамични масиви.
Начините за преоразмеряване на масива по време на изпълнение и също така за запазване на стойностите с помощта на redimserve бяха обсъдени с примери. Накрая научихме Array методи, които ще ни помогнат при извършването на няколко операции.
=> Проверете ВСИЧКИ уроци за VBA тук
Препоръчително четене
- Урок за Excel VBA - Въведение в VBA в Excel
- Типове данни на VBA - Числови и нецифрени типове данни във VBA
- VBA променливи и опции, изрично в VBA
- Обръщане на масив в Java - 3 метода с примери
- Урок за дължина на масив Java с примери за кодове
- Назъбен масив в Java - урок с примери
- Типове данни за масив - int масив, двоен масив, масив от низове и т.н.
- String Array C ++: Внедряване и представяне с примери