Nizi v Visual Basicu za aplikacijo

Nizi v Visual Basicu za aplikacije so strukture, ki običajno shranjujejo nize povezanih spremenljivk iste vrste. Do matričnih vnosov dostopamo z njihovim numeričnim indeksom.

Na primer, obstaja skupina 20 ljudi, katerih imena je treba shraniti za poznejšo uporabo v kodi VBA. Lahko bi preprosto deklarirali 20 spremenljivk za vsako ime, takole:

Dim Team_Member1 kot niz Dim Team_Member2 kot niz ... Dim Team_Member20 kot niz

Lahko pa uporabite veliko enostavnejši in bolj organiziran način – shranite seznam imen članov ekipe v matriko 20 spremenljivk, kot je String:

Dim TeamMembers(1 to 20) Kot niz

V zgornji vrstici smo deklarirali matriko. Zdaj pa zapišimo vrednost vsakemu njegovemu elementu, kot je ta:

Člani_ekipe(1) = "John Smith"

Dodatna prednost shranjevanja podatkov v matriko v primerjavi z uporabo ločenih spremenljivk postane očitna, ko je treba izvesti isto dejanje na vsakem elementu matrike. Če bi bila imena članov ekipe shranjena v 20 ločenih spremenljivkah, bi bilo potrebnih 20 vrstic kode, ki bi jih morali vsakič napisati, da bi za vsakega od njih izvedli isto dejanje. Če pa so imena shranjena v matriki, lahko izvedete želeno dejanje z vsakim od njih s preprosto zanko.

Kako deluje, je prikazano spodaj s primerom kode, ki zaporedno natisne imena vsakega člana ekipe v celicah stolpcev. A aktivni Excelov delovni list.

Za i = 1 do 20 celic(i,1).Vrednost = Team_Members(i) Next i

Očitno je delo z matriko, ki hrani 20 imen, veliko manj okorno in natančnejše kot uporaba 20 ločenih spremenljivk. Kaj pa, če teh imen ni 20, ampak 1000? In če je poleg tega potrebno ločeno voditi priimke in očetovstva?! Jasno je, da bo kmalu postalo popolnoma nemogoče obvladati takšno količino podatkov v kodi VBA brez pomoči polja.

Večdimenzionalni nizi v Excelu Visual Basic

Zgoraj obravnavana polja Visual Basic veljajo za enodimenzionalna. To pomeni, da hranijo preprost seznam imen. Vendar imajo lahko nizi več dimenzij. Na primer, dvodimenzionalni niz lahko primerjamo z mrežo vrednosti.

Recimo, da želite shraniti dnevne podatke o prodaji za januar za 5 različnih ekip. To bo zahtevalo dvodimenzionalni niz, sestavljen iz 5 nizov meritev za 31 dni. Razglasimo matriko takole:

Dim Jan_Sales_Figures (1 do 31, 1 do 5) kot valuta

Za dostop do elementov niza Jan_Sales_Figures, morate uporabiti dva indeksa, ki označujeta dan v mesecu in številko ukaza. Na primer naslov elementa, ki vsebuje podatke o prodaji za 2-oh ekipe za 15 Januar bi napisali takole:

Januar_Sales_Figures(15, 2)

Na enak način lahko deklarirate matriko s 3 ali več dimenzijami – samo dodajte dodatne dimenzije v deklaracijo matrike in uporabite dodatne indekse za sklicevanje na elemente te matrike.

Deklariranje nizov v Excelu Visual Basic

Prej v tem članku smo si že ogledali več primerov deklariranja nizov v VBA, vendar si to temo zasluži podrobnejši pregled. Kot je prikazano, lahko enodimenzionalni niz deklariramo takole:

Dim TeamMembers(1 to 20) Kot niz

Takšna deklaracija pove prevajalniku VBA, da matrika Člani ekipe je sestavljen iz 20 spremenljivk, do katerih je mogoče dostopati z indeksi od 1 do 20. Lahko pa si omislimo, da bi spremenljivke naše matrike oštevilčili od 0 do 19, v tem primeru pa je treba matriko deklarirati takole:

Dim TeamMembers(0 to 19) Kot niz

Pravzaprav se privzeto oštevilčenje elementov matrike začne z 0, v deklaraciji matrike pa začetni indeks morda sploh ni določen, kot je ta:

Dim Team_Members(19) kot niz

Prevajalnik VBA bo tak vnos obravnaval kot deklaracijo matrike 20 elementov z indeksi od 0 do 19.

Ista pravila veljajo pri deklaraciji večdimenzionalnih nizov Visual Basic. Kot je že prikazano v enem od primerov, so pri deklaraciji dvodimenzionalne matrike indeksi njenih dimenzij ločeni z vejico:

Dim Jan_Sales_Figures (1 do 31, 1 do 5) kot valuta

Vendar, če ne podate začetnega indeksa za obe dimenziji matrike in ga deklarirate takole:

Dim Jan_Sales_Figures(31, 5) Kot valuta

potem bo ta vnos obravnavan kot dvodimenzionalna matrika, katere prva dimenzija vsebuje 32 elementov z indeksi od 0 do 31, druga dimenzija matrike pa vsebuje 6 elementov z indeksi od 0 do 5.

Dinamični nizi

Vse matrike v zgornjih primerih imajo fiksno število dimenzij. Vendar v mnogih primerih ne vemo vnaprej, kakšna naj bo naša matrika. Iz situacije se lahko rešimo tako, da deklariramo ogromno matriko, katere velikost bo zagotovo večja, kot je potrebno za našo nalogo. Toda takšna rešitev bo zahtevala veliko dodatnega pomnilnika in lahko upočasni program. Obstaja boljša rešitev. Uporabimo lahko dinamično polje – to je polje, katerega velikost lahko med izvajanjem makra poljubno nastavljamo in spreminjamo.

Dinamično polje je deklarirano s praznimi oklepaji, takole:

Dim Team_Members() kot niz

Nato boste morali med izvajanjem kode z izrazom deklarirati dimenzijo matrike ReDim:

ReDim Team_Members (1 do 20)

In če morate med izvajanjem kode znova spremeniti velikost matrike, lahko znova uporabite izraz ReDim:

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

Upoštevajte, da bo spreminjanje velikosti dinamične matrike na ta način povzročilo izgubo vseh vrednosti, shranjenih v matriki. Če želite shraniti podatke, ki so že v matriki, morate uporabiti ključno besedo Ohranikot je prikazano spodaj:

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

Na žalost ključna beseda Ohrani se lahko uporablja le za spreminjanje zgornje meje dimenzije polja. Spodnje meje matrike na ta način ni mogoče spremeniti. Če ima matrika več dimenzij, uporabite ključno besedo Ohrani, lahko spremenite velikost samo zadnje dimenzije polja.

Pustite Odgovori