Ovaj vodič objasnit će VBA polje, različite vrste polja, varijantno polje i metode polja uz pomoć primjera programiranja:
Uobičajena VBA varijabla je držač mjesta koji pohranjuje vrijednost jednog podatka. Ima odnos 1 prema 1, tj. 1 varijabla za 1 vrijednost.
Sada zamislite da pohranjujete više vrijednosti koje su iste vrste. Umjesto stvaranja više varijabli, možete stvoriti samo jednu varijablu i pohraniti sve iste vrste vrijednosti. Ova se varijabla naziva NIZ.
U ovom vodiču, upoznat ćete što je VBA polje, jednodimenzionalno i dvodimenzionalno polje zajedno s različitim vrstama polja poput fiksnih i dinamičkih. Također ćemo razumjeti različite metode polja koje se koriste u VBA.
VBA polje
Nizovi su posebna vrsta varijable koja može pohraniti više vrijednosti iste vrste podataka .
Na primjer, ako imate imena 100 zaposlenika, tada umjesto stvaranja 100 varijabli tipa niz podataka, možete samo stvoriti jednu varijablu niza tipa niz i dodijeliti 100 vrijednosti na istu varijablu polja.
Jednodimenzionalni niz
Niz koji ima sve elemente u jednom retku ili u jednom stupcu naziva se jednodimenzionalni niz. Navođenje imena svih učenika u razredu u jednom stupcu primjer je jednodimenzionalnog niza. Deklarirano je kako je prikazanoniz je deklariran kao što je prikazano u nastavku.
Dim ArrayName(FirstIndex do LastIndex, FirstIndex to LastIndex) kao DataType.
Primjer: Dim oznake(1 do 3 , 0 do 2) Kao cijeli broj
P #3) Kako pretvoriti raspon u niz?
Odgovor: Možemo koristiti funkciju transponiranja za pretvaranje raspona u niz. Ovaj kod će stvoriti Mys[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
P #4) Što je varijanta polja u VBA?
Odgovor: Varijantni niz će prihvatiti sve vrste tipova podataka za svoj indeks, tj. možete pohraniti različite tipove vrijednosti u jedan niz.
Primjer:
Dim arrayData(3) As Variant
arrayData(0) = “Vikas Vipal”
arrayData(1) = 411234567890#
Načini promjene veličine niza tijekom vrijeme izvođenja i također čuvanje vrijednosti korištenjem redim čuvanja raspravljalo se s primjerima. Na kraju smo naučili Array metode koje će nam pomoći u izvođenju nekoliko operacija.
u nastavku.Dim arrayname(lowerbound To UpperBound) As DataType
Postoji više načina za deklariranje niza. U nastavku je dano nekoliko primjera.
Primjer:
#1) Dim MyArrayExample(0 To 3) As Integer
Stvara niz s lokacijom 0,1,2,3 koji će prihvatiti vrijednosti cijelog broja.
#2) Dim MyArray2(3) Kao niz
Zadane vrijednosti od 0 do 3 i stvara niz s lokacijom 0,1,2,3 koji će prihvatiti vrijednosti niza.
#3) Dim MyArray2(13 do 15) As Double
Stvara niz počevši od 13, tj. 13, 14 i 15, i prihvaća Double vrijednosti. Spomenuli smo donju granicu kao 13, tako da će niz početi dodjeljivati vrijednosti od lokacije 13, a ne od 0.
Stvorimo jednostavan kod i razumijmo sva 3 načina deklaracije niza.
Napomena: Za pisanje VB koda otvorite Microsoft Excel (podržane verzije su Excel 2007, 2010, 2013, 2016, 2019). Idite na Kartica Razvojni programer -> Visual Basic (Alternativno koristite prečac Alt+F11). U VB editoru kliknite na Insert -> Module i zalijepite donji kod.
Razmotrite donji postupak koji prikazuje različite vrste deklaracija.
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
Pritisnite F5 ili pritisnite gumb za pokretanje na alatnoj traci za izvršavanje koda.
Obična varijabla protiv varijable niza
Sada znamo kako jednodimenzionalni niz radi. Odvojimo trenutak da shvatimo zašto su nizovi tako ključniprogramski jezici.
Pretpostavimo da trebate unijeti plaću 5 zaposlenika. Kako biste to postigli korištenjem regularne varijable, trebate kreirati 5 varijabli.
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
Sada napravimo isti kod koristeći varijablu 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
Ovdje, upravo smo upotrijebili jednu varijablu polja koja će pohraniti sva imena zaposlenika. Pretpostavimo da trebate dodati još 100 imena zaposlenika, a zatim samo trebate promijeniti veličinu niza i ne morate stvarati novu varijablu.
To će smanjiti broj redaka u kodu i time ga učiniti lakšim razumljiv i čitljiv.
Dvodimenzionalni niz
2-dimenzionalni niz ima 2 indeksa – prvi indeks će predstavljati retke, a drugi indeks će predstavljati stupac. Ima više redaka i stupaca i obično je predstavljen u obliku tablice.
Deklaracija 2 dim niza je sljedeća:
Dim ArrayName(FirstIndex To LastIndex, FirstIndex To LastIndex) Kao DataType.
Razmotrite primjer pohranjivanja ocjena 2 učenika iz 3 predmeta. Tako ćemo stvoriti dvodimenzionalni niz koji ima 2 retka i 3 stupca.
Počet ćemo niz od retka 1 do retka 2 i od stupca 1 do stupca 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
Pritisnite F5 ili Pritisnite gumb za pokretanje na alatnoj traci za izvršenje koda.
Red 2 i Stupac 2
Red 1 i stupac 3
Fiksni nizovi
Fiksni nizovi koji se nazivaju i statičkiNizovi imaju fiksnu donju i gornju granicu i ta se veličina ne može mijenjati tijekom izvođenja. Veličina niza navedena je tijekom deklaracije unutar zagrada. Svi gornji primjeri su fiksni nizovi jer smo spomenuli njihovu veličinu tijekom deklaracije.
Fiksni nizovi se obično koriste kada ste sigurni u veličinu niza. Na primjer, broj dana u tjednu, možete stvoriti niz s donjom granicom 0 i gornjom granicom 6 i biti sigurni da nikada nećete promijeniti njegovu veličinu.
Dinamički nizovi
Dinamički nizovi omogućuju nam promjenu veličine niza tijekom vremena izvođenja. Ovo je korisno kada niste sigurni u veličinu niza. Pretpostavimo da prilikom upisa na koledž možda niste sigurni koliko će studenata stvarno biti primljeno, tako da ne možete odrediti veličinu u vrijeme dizajna ili deklaracije.
Deklaracija dinamičkog niza slična je statičkom niz s praznim zagradama.
Dim Employee() As String
REDIM
Kada želimo promijeniti veličinu trebamo koristiti REDIM , moramo imati na umu da se donja granica ne može promijeniti, možemo promijeniti samo gornju granicu niza.
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
Sada, znamo da možemo promijeniti veličinu niza tijekom izvođenja, stoga možemo koristiti naredbu ReDim kad god trebamo povećati ubound niza. Pokušajmo još jednom povećati veličinu niza i dodati noviime učenika.
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
Primijetili biste da rezultat ne prikazuje imena učenika dodanih prije, daje nultu vrijednost. To je zato što će naredba Redim stvoriti novi niz s novom veličinom i uništiti stare vrijednosti.
ReDim Preserve
Naredba Represerve pomaže nam u prevladavanju ograničenja ReDima očuvanjem starih vrijednosti i time povećavajući veličinu niza.
Napišimo gornji kod koristeći 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
Kao što smo koristili sačuvati ključnu riječ, prethodno unesene vrijednosti se ne gube i nova vrijednost se uspješno dodaje.
Niz varijanti
Do sada smo vidjeli niz koji prihvaća istu vrstu vrijednosti. Sada deklarirajmo niz kao varijantu i pohranimo različite vrste podataka kao što su String, Date, Long, Integer u jedan niz.
Primjer:
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
Metode VBA nizova
Postoji nekoliko metoda u VBA nizovima koje će nam pomoći u izvođenju različitih funkcija, kao što je navedeno u nastavku.
Sl. Br | Ime | Sintaksa | Opis |
---|---|---|---|
1 | Niz | Niz(arglist) | Pretvara regularnu varijantu varijable u niz. |
2 | Erase | Erase arrayname | Koristi se za ponovno pokretanje niza fiksne veličine i oslobađa memoriju za Dynamicniz. |
3 | IsArray | IsArray (naziv varijable) | Određuje je li varijabla je niz. |
4 | Lbound | LBound( ArrayName, [Dimension] ) | Vraća najniži indeks niza. |
5 | Ubound | UBound( ArrayName , [Dimenzija] ) | Vraća najviši indeks niza. |
6 | Podijeli | Split(expression, [ delimiter, [ limit, [ compare ]]]) | Dijeli niz na više podnizova i vraća niz temeljen na nuli. |
7 | Join | Join(sourcearray, [ delimiter ]) | Spaja više podnizova u nizu i vraća vrijednost niza . |
8 | Filtar | Filtar(izvorni niz, podudaranje, [ uključi, [ usporedi ]]) | Filtar će nam omogućiti pretraživanje određenog podudaranja iz niza. |
Raspravljajmo o svakom od njih detaljno uz primjer.
#1) Niz
Deklarirajmo varijablu regularne varijante i upotrijebimo je kao niz. Kada želite promijeniti regularnu varijantnu varijablu u niz, moramo koristiti funkciju ARRAY kao što je prikazano u primjeru ispod.
Funkcije niza prihvaćaju argument koji sadrži vrijednosti odvojene zarezima . Ove vrijednosti su dodijeljene kao element niza.
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
Morate identificirati varijablu niza pomoću indeksa,stoga se u gornjem primjeru vrijednosti dohvaćaju kao varData(0) varData(2) varData(3).
#2) Erase
Ova funkcija će izbrisati sve vrijednosti unesene za niz fiksne veličine i oslobodit će memorijski prostor za dinamički niz.
Sintaksa: Brisanje naziva niza
Brisanje ima različito ponašanje za različite tipove podataka kao što je dano ispod.
- Za fiksni numerički: Sve vrijednosti se vraćaju na nulu.
- Za fiksni tip podataka niza: Sve vrijednosti se vraćaju na nultu duljinu.
- Za dinamički niz: Oslobađa memoriju koju koristi niz.
Primjer :
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
Rezultat prije korištenja funkcije Brisanje
Rezultat nakon korištenja Brisanja
#3) IsArray
Ova se funkcija koristi za određivanje je li data ulazna varijabla niz ili nije. Vraća true ako je unesena varijabla istinita, inače vraća false.
Sintaksa: IsArray (naziv varijable)
Primjer:
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
Rezultat iz prvog pretinca za poruke
Rezultat iz drugog pretinca za poruke
#4) Lbound
Vraća najniži indeks niza navedenog kao argument za Lbound funkciju.
Sintaksa: LBound( ArrayName, [Dimenzija] )
ArrayName je naziv niza.
Dimenzija je izborna vrijednost cijelog broja, ako niz ima više dimenzija, tada možete odreditikoju dimenziju želite odrediti Lbound.
Primjer:
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 vraća gornji indeks niza navedenog kao argument u funkciji Ubound.
Sintaksa: UBound( ArrayName, [Dimension] )
ArrayName je naziv niz.
Dimenzija je izborna vrijednost cijelog broja, ako niz ima više dimenzija, tada možete odrediti za koju dimenziju želite odrediti Ubound.
Primjer:
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) Split
Vraća polje s brojem podnizova izvedenih iz zadanog cijelog niza.
Sintaksa: Split(izraz, [ razdjelnik, [ ograničenje, [ usporedi ]]])
- Izraz: Ovo je cijeli niz koji će se koristiti za proizvesti podnizove.
- Razdjelnik: Koristeći navedeni razdjelnik, podnizovi će se generirati. Ako ovo nije navedeno, razmak se smatra razdjelnikom.
- Ograničenje: Broj podnizova koji se vraćaju.
- Usporedi: Nakon podniza, možete koristiti različite opcije usporedbe za testiranje rezultata.
Primjer: U donjem primjeru koristimo razdjelnik kao – i limit kao 3.
Stoga će funkcija split odvojiti cijeli niz u podniz na temelju graničnika. Ali također smo spomenuli granicu kao 3 tako da se podnizovi neće formirati nakon granice 3. Stoga posljednji graničnik –bit će preskočen.
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
Ovo je samo obrnuto od dijeljenja, Join će stvoriti jedan niz kombiniranjem nekoliko podnizova.
Sintaksa: Join(sourcearray, [ delimiter ])
Sourcearray: Jednodimenzionalni niz nizova koje želite spojiti u jedan.
Razdjelnik: Navedeni razdjelnik bit će dodan nakon svakog niza tijekom spajanja.
Primjer:
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
Sve 3 vrijednosti su spojeno i \ se nalazi između svake riječi, kao što smo spomenuli \ kao razdjelnik.
#8) Filtar
Filtar će nam omogućiti traženje određenog podudaranja iz niza. Na temelju kriterija filtra, vratit će se podskup niza nizova.
Sintaksa: Filter(izvorni niz, podudaranje, [ uključi, [ usporedi ]])
Primjer:
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
Ovaj primjer tražit će riječ "pomoć" u cijelom nizu polja pomoću funkcije filtra.
Često postavljana pitanja
P #1) Kako dobiti duljinu niza u VBA?
Odgovor: Da biste dobili duljinu niz, koristimo funkciju Ubound. Ova funkcija će nam dati gornji indeks određenog niza.
P #2) Kako deklarirati niz u VBA?
Odgovor: Jedan- dimenzionalni niz se deklarira kao što je prikazano u nastavku.
Dim arrayname(lowerbound To UpperBound) As DataType
Primjer: Dim Myarray(0 To 2) As Integer
Dvodimenzionalan