Taulukot Visual Basic -sovelluksessa

Visual Basic for Application -sovelluksen taulukot ovat rakenteita, jotka yleensä tallentavat samantyyppisiä toisiinsa liittyviä muuttujia. Matriisimerkintöihin päästään niiden numeerisen indeksin perusteella.

Esimerkiksi on olemassa 20 hengen tiimi, joiden nimet on tallennettava myöhempää käyttöä varten VBA-koodissa. Voidaan yksinkertaisesti ilmoittaa 20 muuttujaa jokaiselle nimelle, kuten näin:

Dim Team_Member1 merkkijonona Dim Team_Member2 merkkijonona ... Dim Team_Member20 merkkijonona

Mutta voit käyttää paljon yksinkertaisempaa ja järjestelmällisempää tapaa – tallentaa tiimin jäsenten nimiluettelon 20 muuttujan joukkoon, kuten jono:

Dim Team_Members(1 - 20) merkkijonona

Yllä näytetyllä rivillä olemme ilmoittaneet taulukon. Kirjoitetaan nyt arvo jokaiselle sen elementille seuraavasti:

Team_Members(1) = "John Smith"

Lisäetu tietojen tallentamisesta taulukkoon verrattuna erillisten muuttujien käyttöön ilmenee, kun on tarpeen suorittaa sama toimenpide taulukon jokaiselle elementille. Jos ryhmän jäsenten nimet tallennettaisiin 20 eri muuttujaan, kuluisi 20 riviä koodia kirjoittaa joka kerta suorittaakseen saman toiminnon jokaiselle. Jos nimet on kuitenkin tallennettu taulukkoon, voit suorittaa halutun toiminnon jokaisella niistä käyttämällä yksinkertaista silmukkaa.

Sen toiminta on havainnollistettu alla koodiesimerkillä, joka tulostaa jokaisen tiimin jäsenen nimet peräkkäin sarakkeen soluihin. A aktiivinen Excel-laskentataulukko.

Jos i = 1 - 20 solua(i,1). Arvo = Team_Members(i) Seuraava i

On selvää, että työskentely taulukon kanssa, joka tallentaa 20 nimeä, on paljon vähemmän hankalaa ja tarkempaa kuin 20 erillisen muuttujan käyttäminen. Mutta entä jos näitä nimiä ei ole 20, vaan 1000? Ja jos sen lisäksi sukunimet ja sukunimet on säilytettävä erikseen?! On selvää, että tällaisen datamäärän käsittely VBA-koodissa tulee pian täysin mahdottomaksi ilman taulukon apua.

Moniulotteiset taulukot Excel Visual Basicissa

Yllä käsiteltyjä Visual Basic -taulukoita pidetään yksiulotteisina. Tämä tarkoittaa, että he tallentavat yksinkertaisen nimiluettelon. Matriiseilla voi kuitenkin olla useita ulottuvuuksia. Esimerkiksi kaksiulotteista taulukkoa voidaan verrata arvojen ruudukkoon.

Oletetaan, että haluat tallentaa 5 eri tiimin tammikuun päivittäiset myyntiluvut. Tämä vaatii kaksiulotteisen taulukon, joka koostuu viidestä mittarijoukosta 5 päivän ajan. Ilmoitetaan tällainen taulukko:

Himmeä tammikuun_myyntiluvut (1 - 31, 1 - 5) valuutana

Voit käyttää taulukon elementtejä Tammi_myynti_luvut, sinun on käytettävä kahta indeksiä, jotka osoittavat kuukauden päivän ja komennon numeron. Esimerkiksi myyntiluvut sisältävän elementin osoite 2-oh joukkueita varten 15. päivä Tammikuu kirjoitettaisiin näin:

Tammikuun_myyntiluvut(15, 2)

Samalla tavalla voit ilmoittaa taulukon, jossa on vähintään kolme ulottuvuutta – lisää vain lisädimensioita taulukon ilmoitukseen ja käytä lisäindeksejä viitataksesi tämän taulukon elementteihin.

Taulukon ilmoittaminen Excel Visual Basicissa

Aiemmin tässä artikkelissa tarkastelimme jo useita esimerkkejä taulukoiden ilmoittamisesta VBA:ssa, mutta tämä aihe ansaitsee tarkemman tarkastelun. Kuten näkyy, yksiulotteinen taulukko voidaan ilmoittaa seuraavasti:

Dim Team_Members(1 - 20) merkkijonona

Tällainen ilmoitus kertoo VBA-kääntäjälle, että taulukko Ryhmän jäsenet koostuu 20 muuttujasta, joihin pääsee indekseillä 1 - 20. Voimme kuitenkin harkita taulukon muuttujien numeroimista välillä 0 - 19, jolloin taulukko tulisi ilmoittaa seuraavasti:

Dim Team_Members(0 - 19) merkkijonona

Itse asiassa oletuksena taulukon elementtien numerointi alkaa nollasta, ja taulukon ilmoituksessa alkuindeksiä ei ehkä ole määritetty ollenkaan, kuten näin:

Dim Team_Members(19) As String

VBA-kääntäjä käsittelee tällaista merkintää ilmoittavana 20 elementin taulukon indekseillä 0-19.

Samat säännöt pätevät, kun määritellään moniulotteisia Visual Basic -taulukoita. Kuten yhdessä esimerkeistä on jo osoitettu, kaksiulotteista taulukkoa määritettäessä sen mittojen indeksit erotetaan pilkulla:

Himmeä tammikuun_myyntiluvut (1 - 31, 1 - 5) valuutana

Jos et kuitenkaan määritä aloitusindeksiä taulukon molemmille ulottuvuuksille ja ilmoita se seuraavasti:

Himmeä tammikuun_myyntiluvut(31, 5) Valuuttana

silloin tätä merkintää käsitellään kaksiulotteisena taulukkona, jonka ensimmäinen ulottuvuus sisältää 32 elementtiä indekseillä 0 - 31 ja taulukon toinen ulottuvuus sisältää 6 elementtiä indekseillä 0 - 5.

Dynaamiset taulukot

Kaikilla yllä olevien esimerkkien taulukoilla on kiinteä määrä ulottuvuuksia. Monissa tapauksissa emme kuitenkaan tiedä etukäteen, minkä kokoisen matriisimme tulisi olla. Tilanteesta päästään eroon julistamalla valtava joukko, jonka koko on varmasti suurempi kuin tehtävämme kannalta on tarpeen. Mutta tällainen ratkaisu vaatii paljon ylimääräistä muistia ja voi hidastaa ohjelmaa. On olemassa parempi ratkaisu. Voimme käyttää dynaamista taulukkoa – tämä on taulukko, jonka kokoa voidaan asettaa ja muuttaa kuinka monta kertaa makron suorituksen aikana.

Dynaaminen taulukko ilmoitetaan tyhjillä suluilla, kuten:

Dim Team_Members() merkkijonona

Seuraavaksi sinun on ilmoitettava taulukon ulottuvuus koodin suorittamisen aikana lausekkeen avulla ReDim:

ReDim Team_Members (1-20)

Ja jos koodin suorittamisen aikana sinun on muutettava taulukon kokoa uudelleen, voit käyttää ReDim-lauseketta uudelleen:

Jos Tiimin_koko > 20, niin Redim Team_Members(1 - Team_Size) Lopeta jos

Muista, että dynaamisen taulukon koon muuttaminen tällä tavalla johtaa siihen, että kaikki taulukkoon tallennetut arvot menetetään. Jotta voit tallentaa tietoja jo taulukkoon, sinun on käytettävä avainsanaa säilyttääkuten alla:

Jos tiimin_koko > 20, niin Redim Säilytä Team_Members(1 - Team_Size) Lopeta jos

Valitettavasti avainsana säilyttää voidaan käyttää vain taulukon ulottuvuuden ylärajan muuttamiseksi. Matriisin alarajaa ei voi muuttaa tällä tavalla. Lisäksi, jos taulukolla on useita ulottuvuuksia, käytä avainsanaa säilyttää, vain taulukon viimeisen ulottuvuuden kokoa voidaan muuttaa.

Jätä vastaus