Nizovi u Visual Basicu za aplikacije

Nizovi u Visual Basicu za aplikaciju su strukture koje obično pohranjuju skupove povezanih varijabli istog tipa. Unosima niza se pristupa preko njihovog numeričkog indeksa.

Na primjer, postoji tim od 20 ljudi čija imena treba sačuvati za kasniju upotrebu u VBA kodu. Moglo bi se jednostavno deklarirati 20 varijabli koje će držati svako ime, ovako:

Dim Team_Member1 As String Dim Team_Member2 As String ... Dim Team_Member20 As String

Ali možete koristiti mnogo jednostavniji i organiziraniji način – pohranite listu imena članova tima u nizu od 20 varijabli kao što je niz:

Dim Team_Members(1 do 20) kao string

U redu prikazanom iznad, deklarirali smo niz. Sada napišimo vrijednost svakom njegovom elementu, ovako:

Team_Members(1) = "John Smith"

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

Kako to funkcionira 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) Sljedeći i

Očigledno, rad s nizom koji pohranjuje 20 imena je mnogo manje glomazan i precizniji od korištenja 20 zasebnih varijabli. Ali šta ako ovih imena nije 20, već 1000? A ako je uz to potrebno posebno čuvati prezimena i patronime?! 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 smo gore govorili smatraju se jednodimenzionalnim. To znači da pohranjuju jednostavnu listu imena. Međutim, nizovi mogu imati više dimenzija. Na primjer, dvodimenzionalni niz se može uporediti sa mrežom vrijednosti.

Recimo da želite da sačuvate dnevne brojke o prodaji za januar za 5 različitih timova. Ovo će zahtijevati dvodimenzionalni niz koji se sastoji od 5 setova metrike za 31 dan. Hajde da deklarišemo niz ovako:

Dim Jan_Sales_figure(1 do 31, 1 do 5) kao valuta

Za pristup elementima niza Jan_Sales_figure, trebate koristiti dva indeksa koji označavaju dan u mjesecu i broj komande. Na primjer, adresa elementa koji sadrži podatke o prodaji za 2-oh timovi za 15 th Januar bi bio napisan ovako:

Jan_Sales_figure(15, 2)

Na isti način, možete deklarirati niz sa 3 ili više dimenzija – samo dodajte dodatne dimenzije deklaraciji niza i koristite dodatne indekse za upućivanje na elemente ovog niza.

Deklarisanje nizova u programu Excel Visual Basic

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

Dim Team_Members(1 do 20) kao string

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

Dim Team_Members(0 do 19) kao string

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

Dim Team_Members(19) As String

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

Ista pravila važe kada se deklarišu višedimenzionalni Visual Basic nizovi. Kao što je već prikazano u jednom od primjera, kada se deklarira dvodimenzionalni niz, indeksi njegovih dimenzija su odvojeni zarezom:

Dim Jan_Sales_figure(1 do 31, 1 do 5) kao valuta

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

Dim Jan_Sales_Figure(31, 5) Kao valuta

tada će se ovaj unos tretirati kao dvodimenzionalni niz, čija prva dimenzija sadrži 32 elementa sa indeksima od 0 do 31, a druga dimenzija niza sadrži 6 elemenata sa 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 koja bi veličina našeg niza trebala biti. Iz situacije možemo izaći tako što ćemo proglasiti ogroman niz čija će veličina sigurno biti veća nego što je potrebno za naš zadatak. Ali takvo rješenje će zahtijevati puno dodatne memorije i može usporiti program. Postoji bolje rješenje. Možemo koristiti dinamički niz – ovo je niz čija se veličina može podesiti i promijeniti bilo koji broj puta tokom izvršavanja makronaredbe.

Dinamički niz je deklarisan sa praznim zagradama, ovako:

Dim Team_Members() kao string

Zatim ćete morati deklarirati dimenziju niza tokom izvršavanja koda koristeći izraz ReDim:

ReDim Team_Članovi (1 do 20)

A ako tokom izvršavanja koda trebate ponovo promijeniti veličinu niza, onda možete ponovo koristiti izraz ReDim:

Ako je Team_Size > 20 onda ReDim Team_Members(1 do Team_Size) završava ako

Imajte na umu da će promjena veličine dinamičkog niza na ovaj način rezultirati gubitkom svih vrijednosti pohranjenih u nizu. Da biste pohranili podatke koji su već u nizu, morate koristiti ključnu riječ Očuvajkao što je prikazano ispod:

Ako je Team_Size > 20 onda ReDim Preserve Team_Members(1 do Team_Size) End If

Nažalost ključna riječ Očuvaj može se koristiti samo za promjenu gornje granice dimenzije niza. Donja granica niza se ne može promijeniti na ovaj način. Također, ako niz ima više dimenzija, onda pomoću ključne riječi Očuvaj, samo posljednja dimenzija niza se može promijeniti.

Ostavite odgovor