Nizovi u Visual Basicu za aplikaciju

Nizovi u Visual Basicu for Application su strukture koje obično pohranjuju skupove povezanih varijabli iste vrste. Unosima polja pristupa se njihovim numeričkim indeksom.

Na primjer, postoji tim od 20 ljudi čija imena treba spremiti za kasniju upotrebu u VBA kodu. Moglo bi se jednostavno deklarirati 20 varijabli za držanje svakog imena, ovako:

Dim Team_Member1 kao niz Dim Team_Member2 kao niz ... Dim Team_Member20 kao niz

Ali možete upotrijebiti puno jednostavniji i organiziraniji način – pohraniti popis imena članova tima u nizu od 20 varijabli poput Niz:

Dim TeamMembers(1 to 20) Kao niz

U retku prikazanom gore, deklarirali smo niz. Sada napišimo vrijednost svakom od njegovih elemenata, ovako:

Članovi_tima(1) = "John Smith"

Dodatna prednost pohranjivanja podataka u nizu, u usporedbi s korištenjem zasebnih varijabli, postaje očita kada postane potrebno izvršiti istu radnju na svakom elementu niza. Kad bi imena članova tima bila pohranjena u 20 zasebnih varijabli, bilo bi potrebno 20 redaka koda za pisanje svaki put da bi se izvršila ista radnja na svakom od njih. Međutim, ako su imena pohranjena u nizu, tada možete izvesti željenu radnju sa svakim od njih pomoću jednostavne petlje.

Kako to radi prikazano je u nastavku s primjerom koda koji ispisuje imena svakog člana tima redom u ćelijama stupaca. A aktivni Excel radni list.

Za i = 1 do 20 ćelija(i,1).Vrijednost = Članovi_tima(i) Dalje i

Očito, rad s nizom koji pohranjuje 20 imena puno je manje težak i točniji od korištenja 20 zasebnih varijabli. Ali što ako tih imena nije 20, nego 1000? A ako se uz to traži odvojeno čuvanje prezimena i patronima?! Jasno je da će uskoro postati potpuno nemoguće rukovati takvom količinom podataka u VBA kodu bez pomoći niza.

Višedimenzionalni nizovi u programu Excel Visual Basic

Visual Basic nizovi o kojima se gore raspravljalo smatraju se jednodimenzionalnima. To znači da pohranjuju jednostavan popis imena. Međutim, nizovi mogu imati više dimenzija. Na primjer, dvodimenzionalni niz može se usporediti s mrežom vrijednosti.

Recimo da želite spremiti dnevne podatke o prodaji za siječanj za 5 različitih timova. Za to će biti potreban dvodimenzionalni niz koji se sastoji od 5 skupova mjernih podataka za 31 dan. Deklarirajmo niz ovako:

Dim Jan_Sales_Figures(1 do 31, 1 to 5) kao valuta

Za pristup elementima niza Brojke_prodaje_siječanj, trebate koristiti dva indeksa koji označavaju dan u mjesecu i broj naredbe. Na primjer, adresa elementa koji sadrži podatke o prodaji za 2-oh timovi za 15 Siječanj bi se ovako napisao:

Brojke_prodaje_siječanj(15, 2)

Na isti način možete deklarirati polje s 3 ili više dimenzija – samo dodajte dodatne dimenzije u deklaraciju polja i koristite dodatne indekse za upućivanje na elemente ovog polja.

Deklariranje nizova u Excel Visual Basicu

Ranije u ovom članku već smo pogledali nekoliko primjera deklariranja nizova u VBA, ali ova tema zaslužuje detaljniji pregled. Kao što je prikazano, jednodimenzionalni niz može se deklarirati ovako:

Dim TeamMembers(1 to 20) Kao niz

Takva deklaracija govori VBA prevoditelju da polje Članovi tima sastoji se od 20 varijabli kojima se može pristupiti u indeksima od 1 do 20. Međutim, mogli bismo razmisliti o numeriranju naših varijabli niza od 0 do 19, u kojem bi slučaju niz trebao biti deklariran ovako:

Dim TeamMembers(0 to 19) Kao niz

Zapravo, prema zadanim postavkama, numeriranje elemenata niza počinje od 0, au deklaraciji niza početni indeks možda uopće nije naveden, ovako:

Dim TeamMembers(19) Kao niz

VBA kompajler će takav unos tretirati kao deklaraciju niza od 20 elemenata s indeksima od 0 do 19.

Ista pravila vrijede kada se deklariraju višedimenzionalni Visual Basic nizovi. Kao što je već pokazano u jednom od primjera, kada se deklarira dvodimenzionalni niz, indeksi njegovih dimenzija odvajaju se zarezom:

Dim Jan_Sales_Figures(1 do 31, 1 to 5) kao valuta

Međutim, ako ne navedete početni indeks za obje dimenzije niza i deklarirate ga ovako:

Dim Jan_Sales_Figures(31, 5) Kao valuta

tada će se ovaj unos tretirati kao dvodimenzionalni niz čija prva dimenzija sadrži 32 elementa s indeksima od 0 do 31, a druga dimenzija niza sadrži 6 elemenata s indeksima od 0 do 5.

Dinamički nizovi

Svi nizovi u gornjim primjerima imaju fiksni broj dimenzija. Međutim, u mnogim slučajevima ne znamo unaprijed kolika bi trebala biti veličina našeg niza. Iz situacije se možemo izvući deklariranjem golemog niza čija će veličina sigurno biti veća od potrebne za naš zadatak. Ali takvo će rješenje zahtijevati puno dodatne memorije i može usporiti program. Postoji bolje rješenje. Možemo koristiti dinamički niz – to je niz čija se veličina može postaviti i mijenjati bilo koji broj puta tijekom izvođenja makronaredbe.

Dinamički niz se deklarira s praznim zagradama, ovako:

Dim Team_Members() kao niz

Zatim ćete morati deklarirati dimenziju niza tijekom izvođenja koda pomoću izraza ReDim:

ReDim Team_Members (1 do 20)

A ako tijekom izvođenja koda trebate ponovno promijeniti veličinu niza, tada možete ponovno upotrijebiti izraz ReDim:

If Team_Size > 20 Then ReDim Team_Members(1 To Team_Size) End If

Imajte na umu da će promjena veličine dinamičkog polja na ovaj način rezultirati gubitkom svih vrijednosti pohranjenih u polju. Kako biste pohranili podatke koji su već u nizu, morate koristiti ključnu riječ sačuvatikao što je prikazano u nastavku:

If Team_Size > 20 Then ReDim Preserve Team_Members(1 To Team_Size) End If

Nažalost, ključna riječ sačuvati može se koristiti samo za promjenu gornje granice dimenzije polja. Donja granica niza ne može se mijenjati na ovaj način. Također, ako niz ima više dimenzija, tada se koristi ključna riječ sačuvati, može se mijenjati samo posljednja dimenzija niza.

Ostavi odgovor