Овај водич ће објаснити ВБА низ, различите типове низова, низ варијанти и методе низа уз помоћ примера програмирања:
Обична ВБА варијабла је држач места који чува вредност једног податка. Има однос 1 према 1, тј. 1 променљива за 1 вредност.
Сада замислите да чувате више вредности које су истог типа. Уместо да креирате више променљивих, можете само да креирате једну променљиву и складиштите све исте врсте вредности. Ова променљива се зове НИЗ.
У овом водичу, упознаћете шта је ВБА низ, једнодимензионални и дводимензионални низ заједно са различитим типовима низова као што су фиксни и динамички. Такође ћемо разумети различите методе низа које се користе у ВБА.
ВБА низ
Низови су посебна врста променљиве која може да складишти више вредности истог типа података .
На пример, ако имате имена 100 запослених, онда уместо да креирате 100 варијабли стринг типа података, можете само да креирате једну променљиву низа типа стринг и доделите 100 вредности на исту променљиву низа.
Једнодимензионални низ
Низ који има све елементе у једном реду или у једној колони назива се једнодимензионални низ. Навођење имена свих ученика у одељењу у једној колони је пример једнодимензионалног низа. Декларисано је као што је приказанониз је декларисан као што је приказано испод.
Дим АрраиНаме(ФирстИндек то ЛастИндек, ФирстИндек то ЛастИндек) као ДатаТипе.
Пример: Дим ознаке(1 до 3 , 0 до 2) Као цео број
К #3) Како претворити опсег у низ?
Одговор: Можемо користити функцију транспоновања да конвертујете опсег у низ. Овај код ће креирати Мис[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
К #4) Шта је варијанта низа у ВБА?
Одговор: Низ варијанти ће прихватити све врсте типова података за свој индекс, тј. можете да складиштите различите типове вредности у једном низу.
Пример:
Дим арраиДата(3) Ас Вариант
арраиДата(0) = “Викас Випал”
арраиДата(1) = 411234567890#
Начини да промените величину низа током време извођења, као и очување вредности коришћењем редим очувања, дискутовано је са примерима. Коначно, научили смо низ метода које ће нам помоћи у извођењу неколико операција.
испод.Дим арраинаме(ловербоунд То УпперБоунд) Ас ДатаТипе
Постоји више начина да се декларише низ. У наставку је дато неколико примера.
Пример:
#1) Дим МиАрраиЕкампле(0 до 3) Као цео број
Креира низ са локацијом 0,1,2,3 који ће прихватити целобројне вредности.
#2) Дим МиАрраи2(3) Ас Стринг
Подразумеване вредности од 0 на 3 и креира низ са локацијом 0,1,2,3 који ће прихватити стринг вредности.
#3) Дим МиАрраи2(13 до 15) Ас Доубле
Креира низ почевши од 13, тј. 13, 14 и 15, и прихвата двоструке вредности. Поменули смо доњу границу као 13, тако да ће низ почети да додељује вредности са локације 13 уместо 0.
Хајде да направимо једноставан код и разумемо сва 3 начина декларације низа.
Напомена: За писање ВБ кода Отворите Мицрософт Екцел (подржане верзије су Екцел 2007, 2010, 2013, 2016, 2019). Идите на Картица за програмере -&гт; Висуал Басиц (Алтернативно користите пречицу Алт+Ф11). У ВБ едитору кликните на Инсерт -&гт; Модул и налепите код испод.
Размотрите доњу процедуру која приказује различите типове декларација.
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
Притисните Ф5 или притисните дугме за покретање на траци са алаткама да извршите код.
Обична променљива против променљиве низа
Сада знамо како функционише једнодимензионални низ. Хајде да одвојимо тренутак да схватимо зашто су низови тако кључнипрограмских језика.
Претпоставимо да треба да унесете плату 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
Сада направимо исти код користећи променљиву низа.
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 ученика добијених у 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
Притисните Ф5 или Притисните дугме за покретање на траци са алаткама да бисте извршили код.
Ред 2 и Колона 2
Ред 1 и колона 3
Фиксни низови
Фиксни низови који се називају и статичкиНизови имају фиксну доњу и горњу границу и ова величина се не може променити у времену извршавања. Величина низа је наведена током декларације унутар заграда. Сви горњи примери су фиксни низови пошто смо поменули његову величину током декларације.
Фиксни низови се обично користе када сте сигурни у величину низа. На пример, број дана у недељи, можете да креирате низ са доњом границом 0 и горњом границом 6 и будите сигурни да никада нећете променити његову величину.
Динамички низови
Динамички низови нам омогућавају да променимо величину низа током времена рада. Ово је корисно када нисте сигурни у величину низа. Претпоставимо да приликом уписа на колеџ можда нисте сигурни колико студената ће заиста добити пријем, тако да не можете да одредите величину у време дизајна или декларације.
Декларација динамичког низа је слична статичком низ са празним заградама.
Дим Емплоиее() Ас Стринг
РЕДИМ
Када желимо да променимо величину, треба да користимо РЕДИМ , треба да приметимо да доња граница не може да се промени, можемо променити само горњу границу низа.
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
Сада, знамо да можемо промените величину низа током времена извршавања, тако да можемо да користимо наредбу РеДим кад год треба да повећамо ограничење низа. Покушајмо још једном повећати величину низа и додати новииме ученика.
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
Приметили бисте да резултат не приказује имена ученика која су претходно додата, даје нулту вредност. То је зато што ће наредба Редим креирати нови низ са новом величином и уништити старе вредности.
РеДим Пресерве
Репресерве израз нам помаже да превазиђемо ограничења РеДим-а чувајући старе вредности и на тај начин повећавајући величину низа.
Хајде да поново напишемо горњи код користећи РеДим Пресерве.
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
Као што смо користили Сачувај кључну реч, претходно унете вредности се не губе и нова вредност се успешно додаје.
Низ варијанти
До сада смо видели низ који прихвата исту врсту вредности. Хајде сада да декларишемо низ као варијанту и складиштимо различите типове података као што су Стринг, Дате, Лонг, Интегер у једном низу.
Пример:
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
Методе ВБА низа
Постоји неколико метода у ВБА низовима који ће нам помоћи да обављамо различите функције, као што је наведено у наставку.
Сл. Бр | Име | Синтакса | Опис |
---|---|---|---|
1 | Низ | Низ(арглист) | Конвертује регуларну варијанту променљиву у низ. |
2 | Ерасе | Ерасе арраинаме | Користи се за поновно покретање низа фиксне величине и ослобађа меморију за Динамицниз. |
3 | ИсАрраи | ИсАрраи (име променљиве) | Одређује да ли променљива је низ. |
4 | Лбоунд | ЛБоунд( АрраиНаме, [Дименсион] ) | Враћа најнижи индекс низа. |
5 | Убоунд | УБоунд( АрраиНаме , [Димензија] ) | Враћа највиши индекс низа. |
6 | Сплит | Сплит(екпрессион, [ делимитер, [ лимит, [ цомпаре ]]]) | Дели стринг на више подстрингова и враћа низ заснован на нули. |
7 | Јоин | Јоин(соурцеарраи, [ делимитер ]) | Уједињује више подстрингова у низу и враћа вредност стринга . |
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
Морате да идентификујете променљиву низа користећи индекс,стога се у горњем примеру вредности преузимају као варДата(0) варДата(2) варДата(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) ИсАрраи
Ова функција се користи за одређивање да ли је дата улазна променљива низ или не. Враћа тачно ако је унета променљива тачна, у супротном враћа нетачно.
Синтакса: ИсАрраи (име променљиве)
Пример:
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) Лбоунд
Враћа најнижи индекс низа наведен као аргумент за функцију Лбоунд.
Синтакса: ЛБоунд( АрраиНаме, [Димензија] )
Име низа је име низа.
Димензија је опциона целобројна вредност, ако низ има више димензија, онда можете да одредите дакоју димензију желите да одредите Лбоунд.
Пример:
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) Убоунд
То враћа горњи индекс низа наведен као аргумент у функцији Убоунд.
Синтакса: УБоунд( АрраиНаме, [Дименсион] )
Име низа је име арраи.
Димензија је опциона вредност целог броја, ако низ има више димензија, онда можете да наведете коју димензију желите да одредите Убоунд.
Пример:
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) Јоин
Ово је само обрнуто од поделе, Јоин ће креирати један стринг комбиновањем неколико подстрингова.
Синтакса: Јоин(соурцеарраи, [ делимитер ])
Соурцеарраи: Једнодимензионални низ стрингова које желите да спојите у један.
Разграничник: Наведени граничник ће бити додат после сваког стринга током спајања.
Пример:
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) Како добити дужину низа у ВБА?
Одговор: Да бисте добили дужину низа низ, користимо функцију Убоунд. Ова функција ће нам дати горњи индекс наведеног низа.
П #2) Како декларисати низ у ВБА?
Одговор: Један- димензионални низ је декларисан као што је приказано испод.
Дим име низа(доња граница до горње границе) Као тип података
Пример: Дим Миарраи(0 до 2) као цео број
Дводимензионални