excel vba array array methods with examples
Овај водич ће вам објаснити ВБА низ, разне типове низова, варијантни низ и методе низа уз помоћ примера програмирања:
Редовна ВБА променљива је држач места који чува вредност појединачних података. Има однос 1 до 1, тј. 1 променљива за 1 вредност.
Сада замислите да чувате више вредности које су истог типа. Уместо да креирате више променљивих, можете само створити једну променљиву и сачувати све исте типове вредности. Ова променљива се назива АРРАИ.
=> Посетите овде да бисте видели ВБА серију тренинга за све
питања и одговори за интервју за техничку подршку
У овом упутству ћете упознати шта је ВБА низ, једнодимензионални и дводимензионални низ заједно са различитим врстама низова као што су Фикед и Динамиц. Такође ћемо разумети различите методе низа које се користе у ВБА.
Шта ћете научити:
ВБА низ
Низови су посебна врста променљиве која може да ускладишти више вредности истог типа података.
На пример, ако имате имена 100 запослених, уместо да креирате 100 променљивих низа типа података, можете само створити једну променљиву низа типа стринг и доделити 100 вредности истој променљивој низа.
Једнодимензионални низ
Низ који има све елементе у једном реду или у једној колони назива се једнодимензионални низ. Навођење имена свих ученика у одељењу у једној колони пример је једнодимензионалног низа. Проглашава се као што је приказано у наставку.
Затамни име низа (од доњег до горњег) као тип података
Постоји више начина за декларисање низа. У наставку је дато неколико примера.
Пример:
# 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 ученика добијених из 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
Притисните Ф5 или Притисните дугме за покретање на траци са алаткама да бисте извршили код.
Ред 2 и Колона 2
Ред 1 и Колона 3
Фиксни низови
Фиксни низови који се називају и статички низови имају фиксну доњу и горњу границу и ова величина се не може мењати у току извођења. Величина низа је наведена током декларације у заградама. Сви горе наведени примери су Фиксни низови, као што смо поменули његову величину током декларације.
Фиксни низови се обично користе када сте сигурни у величину низа. На пример, број дана у недељи, можете створити низ са доњом и горњом границом 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
ВБА методе низа
Постоји неколико метода у ВБА низовима које ће нам помоћи да обављамо различите функције, као што је поменуто у наставку.
Сл. Не | Име | Синтакса | Опис |
---|---|---|---|
7 | Придружити | Придружите се (изворни низ, (граничник)) | Спаја више поднизова у низу и враћа вредност низа. |
1 | Арраи | Низ (преварантски) | Претвара редовну варијанту променљива у низ. |
два | Избриши | Избриши име низа | Користи се за реинцијализацију низа фиксне величине и ослобађа меморију за динамички низ. |
3 | ИсАрраи | ИсАрраи (име променљиве) | Одређује да ли је променљива низ. |
4 | Лбоунд | ЛБоунд (АрраиНаме, (Дименсион)) | Приказује најнижи индекс низа. |
5 | Убоунд | УБоунд (АрраиНаме, (Дименсион)) | Приказује највећи индекс низа. |
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
Морате да идентификујете променљиву низа помоћу индекса, стога су у горњем примеру вредности преузете као варДата (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) као целобројно
Дводимензионални низ је декларисан као што је приказано у наставку.
Дим АрраиНаме (ФирстИндек То ЛастИндек, ФирстИндек То ЛастИндек) Као ДатаТипе.
Пример: Затамњене ознаке (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 #
П # 5) Шта је основна изјава о опцијама?
Одговор: Ово се користи за декларацију доњег индекса низа и користи се на почетку модула. Подразумевано је доњи индекс 0 ако декларишете опцију Басе 1 на нивоу модула, тада ће за све низове подразумевани доњи индекс бити 1.
Закључак
У овом упутству смо научили како се низови користе у ВБА и видели смо како се низови разликују од регуларне променљиве. Једнодимензионалне и дводимензионалне низове истраживали смо са примерима. Такође смо разговарали о фиксним и динамичким низовима.
Примери су дискутовали о начинима промене величине низа током извођења и такође очувања вредности помоћу редимсервера. На крају смо научили Арраи методе које ће нам помоћи у извођењу неколико операција.
=> Проверите СВЕ ВБА водиче овде
Препоручено читање
- Водич за Екцел ВБА - Увод у ВБА у програму Екцел
- ВБА типови података - нумерички и не-нумерички типови података у ВБА
- ВБА променљиве и опције експлицитне у ВБА
- Обрни низ у Јави - 3 методе са примерима
- Водич за дужину Јава низа са примерима кода
- Назубљени низ у Јави - Водич са примерима
- Типови података низа - инт низ, двоструки низ, низ жица итд.
- Низ низа Ц ++: Имплементација и представљање са примерима