Овој туторијал ќе објасни VBA Array, различни типови низи, варијантни низи и методи на низа со помош на примери за програмирање:
Обичната VBA променлива е држач за место што ги складира вредност на еден податок. Има врска од 1 до 1, т.е. 1 променлива за 1 вредност.
Сега замислете да складирате повеќе вредности кои се од ист тип. Наместо да креирате повеќе променливи, можете само да креирате една променлива и да ги зачувате сите исти типови на вредности. Оваа променлива се нарекува ARRAY.
Во ова упатство, ќе дознаете што е VBA низа, еднодимензионални и дводимензионални низи заедно со различните видови низи како што се Фиксни и Динамички. Ќе ги разбереме и различните методи на низа што се користат во VBA.
VBA Array
Низите се посебен вид на променлива што може да складира повеќе вредности од ист тип на податоци .
На пример, ако имате имиња на 100 вработени, тогаш наместо да креирате 100 променливи на низа од типот на податоци, можете само да креирате една променлива низа од тип string и да доделите 100 вредности на иста променлива низа.
Еднодимензионална низа
Низа која ги има сите елементи во еден ред или во една колона се нарекува Еднодимензионална низа. Набројувањето на имињата на сите ученици во одделението во една колона е пример за еднодимензионална низа. Се декларира како што е прикажанонизата се декларира како што е прикажано подолу.
Затемнети Име на Низата (ПрвИндекс до Последниот Индекс, Прв Индекс до Последниот Индекс) како Тип на податоци.
Пример: Затемнети ознаки(1 до 3 , 0 до 2) Како цел број
Q #3) Како да го претворите опсегот во низа?
Одговор: Можеме да ја користиме функцијата Transpose за претворање на опсегот во низа. Овој код ќе создаде Mys[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
Q #4) Што е варијанта на низа во VBA?
Одговор: Низата варијанта ќе ги прифати сите видови на типови на податоци за нејзиниот индекс, т.е. можете да складирате различни типови вредности во една низа.
Пример:
Dim arrayData(3) As Variant
arrayData(0) = “Vikas Vipal”
arrayData(1) = 411234567890#
Начините за промена на големината на низата за време на време на траење и, исто така, зачувување на вредностите со користење на зачувување redim беа дискутирани со примери. Конечно научивме Array методи кои ќе ни помогнат во извршувањето на неколку операции.
подолу.Затемнете го името на низата (долно врзано до горната граница) како тип на податоци
Постојат повеќе начини да се декларира низа. Подолу се дадени неколку примери.
Пример:
#1) Dim MyArrayExample(0 до 3) како цел број
Креира низа со локација 0,1,2,3 која ќе прифаќа цели броеви.
#2) Dim MyArray2(3) As String
Стандардно од 0 до 3 и создава низа со локација 0,1,2,3 која ќе ги прифати вредностите на низата.
#3) Dim MyArray2(13 до 15) As Double
Креира низа почнувајќи од 13, односно 13, 14 и 15 и прифаќа двојни вредности. Ја споменавме долната граница како 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-димензионална низа има 2 индекси – првиот индекс ќе ги претставува редовите, а вториот индекс ќе ја претставува колоната. Има повеќе редови и колони и обично се претставува во формат на табела.
Декларирањето на низата со 2 затемнети е како што следува:
Името на затемнети низа(FirstIndex To LastIndex, FirstIndex To LastIndex) Како DataType.
Разгледајте пример за складирање оценки од 2 ученици добиени во 3 предмети. Така, ќе создадеме 2-димензионална низа која зема 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 и бидете сигурни дека никогаш нема да ја промените нејзината големина.
Динамички низи
Динамичките низи ни дозволуваат да ја смениме големината на низата за време на извршувањето. Овие се корисни кога не сте сигурни за големината на низата. Да претпоставиме дека при приемот на колеџ, можеби не сте сигурни колку студенти навистина ќе добијат прием, така што не можете да ја одредите големината во времето на дизајнирање или декларирање.
Декларацијата за динамичка низа е слична на статична низа со празни загради.
Dim Employee() As String
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 секогаш кога треба да го зголемиме ubound на низата. Ајде да се обидеме да ја зголемиме големината на низата уште еднаш и да додадеме новаиме на ученик.
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
Како што користевме Зачувај клучниот збор, претходно внесените вредности не се губат и новата вредност се додава успешно.
Variant Array
До сега видовме низа која прифаќа ист тип на вредности. Сега ајде да ја декларираме низата како варијанта и да ги складираме различните типови на податоци како стринг, датум, долг, цел број во една низа.
Пример:
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 низите кои ќе ни помогнат да извршуваме различни функции, како што е споменато подолу.
Сл. Не | Име | Синтакса | Опис |
---|---|---|---|
1 | Низа | Array(arglist) | Конвертира редовна варијанта променлива во низа. |
2 | Избриши | Избриши име на низа | Се користи за реинцијализирање на низата со фиксна големина и ја ослободува меморијата за Dynamicниза. |
3 | IsArray | IsArray (име на променлива) | Одредува дали променливата е низа. |
4 | Lbound | LBound( ArrayName, [Dimension] ) | Го враќа најнискиот знак од низата. |
5 | Ubound | UBound( ArrayName , [Димензија] ) | Го враќа највисокиот знак од низата. |
6 | Сплит | Сплит (израз, [ разграничувач, [ ограничување, [ спореди ]]]) | Го дели низата на повеќе поднизи и враќа низа базирана на нула. |
7 | Join | Join(изворна низа, [ разграничувач ]) | Поврзува повеќе поднизи во низа и враќа вредност на низата . |
8 | Филтер | Филтер(изворна низа, совпаѓање, [ вклучи, [ спореди ]]) | Филтерот ќе ни овозможи пребарување на одредено совпаѓање од низа. |
Да разговараме за секој од нив детално со пример.
#1) Низа
Ајде да декларираме променлива со редовна варијанта и да ја користиме како низа. Кога сакате да смените променлива со редовна варијанта во низа, треба да користиме функција ARRAY како што е прикажано во примерот подолу.
Функциите на низата прифаќаат аргумент кој содржи вредности одделени со запирка . Овие вредности се доделени како елемент на низата.
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) Избриши
Оваа функција ќе ги избрише сите вредности внесени за низа со фиксна големина и ќе го ослободи меморискиот простор за динамична низа.
Синтакса: Избриши го името на низата
Избриши има различно однесување за различни типови податоци како што е дадено подолу.
- За фиксна нумеричка: Сите вредности се ресетираат на нула.
- За фиксен тип на податоци: Сите вредности се ресетираат на нула должина.
- За динамична низа: Ја ослободува меморијата што ја користи низата.
Пример :
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
Резултат пред да се користи функцијата Избриши
Резултат по користење на Избриши
#3) IsArray
Оваа функција се користи за да се одреди дали дадената влезна променлива е низа или не. Се враќа точно ако внесената променлива е точно, во спротивно враќа неточно.
Синтакса : 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
Резултатот од првото поле за пораки
Резултатот од второто поле за пораки
#4) Lbound
Го враќа најнискиот знак од низата наведен како аргумент за функцијата Lbound.
Синтакса: LBound(ArrayName, [Dimension] )
ArrayName е името на низата.
Димензијата е опционална цел број вредност, ако низата има повеќе димензии, тогаш можете да наведетекоја димензија сакате да ја одредите 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
It го враќа горниот знак на низата наведен како аргумент во функцијата Ubound.
Синтакса: UBound( ArrayName, [Dimension] )
ArrayName е името на низа.
Димензијата е опционална цел број вредност, ако низата има повеќе димензии, тогаш можете да одредите која димензија сакате да ја одредите 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.
Оттука, функцијата сплит ќе ја подели целата низа во подниза врз основа на разграничувачот. Но, ја споменавме и границата како 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 ќе создаде една низа со комбинирање на неколку поднизи.
Синтакса: Приклучи се (изворна низа, [ разграничувач ])
Изворна низа: Еднодимензионална низа низи што сакате да ги споите во една.
Одвојувач: Одредениот разграниувач ќе се додаде по секоја низа додека се спојува.
Пример:
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) Филтер
Филтерот ќе ни овозможи да пребарување на одредено совпаѓање од низа. Врз основа на критериумите за филтрирање, подмножеството од низа низа ќе се врати.
Синтакса: Филтер(изворна низа, совпаѓање, [ вклучи, [ спореди ]])
Пример:
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) како цел број
Дводимензионална