VBA - Ilmoita (himmeä), luo ja alusta matriisimuuttuja

Tämä opetusohjelma näyttää kuinka julistaa (Dim), luoda ja alustaa joukkomuuttujia VBA: ssa

Mikä on VBA Array -muuttuja?

VBA -taulukkomuuttujaa voidaan ajatella muuttujien ryhmänä, joka on tallennettu samaan nimeen ja jolla on sama tietotyyppi. Matriisi voi tallentaa tekstiä, numeroita tai objekteja.

Viitat matriisin elementtiin käyttämällä sen indeksinumeroa.

Voit ilmoittaa taulukkomuuttujan samalla tavalla kuin minkä tahansa muuttujan käyttämällä Dim-, Staattinen-, Julkinen- tai Yksityinen -avainsanaa.

Staattiset taulukot

Matriiseja on kahta tyyppiä - staattinen ja dynaaminen. Staattinen taulukko ilmoitetaan sen koolla, joka määritetään, kun ilmoitat taulukon alun perin. Sitä kutsutaan myös kiinteäksi taulukkoksi.

1 Dim intA (4) kokonaislukuna

Yllä oleva taulukko ilmoitetaan käyttämällä Dim -lauseketta menettely- tai moduulitasolla, ja taulukon koko on 5, koska emme ole ilmoittaneet taulukon LBound -arvoa.

Ei, se ei ole kirjoitusvirhe! Matriisin koko on 5, vaikka 4 on syötetty taulukkoon. Tämä johtuu siitä, että taulukkoindeksit alkavat automaattisesti nollasta.

Array -indeksit

Taulukkoindeksit alkavat automaattisesti nollasta, ellei Vaihtoehtokanta 1 on koodimoduulin yläosassa.

Jos Vaihtoehtokanta 1 taulukko alkaa automaattisesti 1: stä.

Pidän kuitenkin muuttujien ilmoittamista tällä tavalla ongelmallisena. Koodin tarkistajat eivät ehkä tiedä, että taulukot alkavat nollasta tai Optiopohja 1 -ilmoituksesta

Sen sijaan haluan ilmoittaa nimenomaisesti matriisien alku- ja loppukohdat:

1 Dim intA (2-5) kokonaislukuna

Huomaa, että kun teet niin, voit aloittaa taulukon mistä tahansa numerosta (ei vain 1 tai 0).

Dynaamiset taulukot

Dynamic Array -muuttuja on taulukko, jonka kokoa voidaan muuttaa ajon aikana. Ilmoitat dynaamisia muuttujia ilman kokoa.

1 Dim intA () kokonaislukuna

ReDim -käskyn avulla voit määrittää taulukon koon taulukon luomisen jälkeen.

1 ReDim intA (2)

Voit muuttaa dynaamisen taulukon kokoa milloin tahansa. Kuitenkin käytettäessä ReDim -lauseketta kaikki olemassa olevat arvot poistetaan. Jos haluat säilyttää olemassa olevat taulukkoarvot, käytä ReDim Säilytä sen sijaan.

1 ReDim Preserve intA (2)

Voit julistaa dynaamisen taulukon menettely-, moduuli- tai globaalitasolla, mutta voit käyttää ReDim -lauseketta vain menettelyn sisällä.

Vaihtoehtoiset taulukot

Vaihtoehtoiset taulukot ovat dynaamisia matriiseja, joiden kanssa on helpompi työskennellä.

1 Dim varNames ()

Huomaa, että sinun ei tarvitse määrittää tietotyyppiä (sen oletetaan olevan muunnelma) tai taulukon kokoa.

Kuten näemme alla, voit alustaa muunnelmat taulukkotoiminnolla (ei tarvitse muuttaa taulukkojen kokoa ensin)!

Ilmoita moduuli ja julkiset taulukot

Kuten yllä on esitetty, matriisit voidaan ilmoittaa menettelyjen sisällä käytettäväksi kyseisessä menettelyssä:

1234 Sub StaticArray ()'ilmoittaa taulukon, jonka LBound -arvo on 1 ja UBound -arvo 4Dim IntA (1-4) kokonaislukunaEnd Sub

Mutta ne voidaan ilmoittaa myös moduuli- tai globaalitasolla.

1234567 Vaihtoehto Selkeä'ilmoittaa taulukon, jonka LBound -arvo on 1 ja UBound -arvo 4Dim IntA (1-4) kokonaislukunaSub StaticArray ()End Sub

Tässä esimerkissä array -muuttuja voidaan kutsua mihin tahansa tämän koodimoduulin sisällä. Sen sijaan voit julistaa julkisen taulukon, jota voidaan käyttää koko VBA -projektisi aikana (katso seuraava osa).

Julkisen joukon julistaminen

Ilmoitat julkisen staattisen taulukon kuin julkisen muuttujan.

1 Julkiset strNames (3) merkkijonona

Tämän ilmoituksen on oltava moduulin yläosassa, vaihtoehto Explicit alla. Sitä voitaisiin sitten käyttää koko VBA -projektisi aikana missä tahansa moduulissa tai menettelyssä.

Jos ilmoitat taulukon moduulin yläosassa, mutta Dim -avainsanalla, kyseisen taulukon käyttö on rajoitettu kyseiseen yksittäiseen moduuliin. Jos yrität käyttää taulukkoa erillisessä moduulissa, seurauksena on virhe.

Alusta taulukot

Voit määrittää arvot staattiselle taulukolle seuraavalla tavalla.

1234567891011 Sub StaticArray ()'ilmoittaa taulukon, jonka LBound -arvo on 1 ja UBound -arvo 4Dim IntA (1-4) kokonaislukuna'alustaa taulukkoIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näytä taulukon sijainnin 2 tulos välittömässä ikkunassaDebug.Print IntA (2)End Sub

Jos suoritat yllä olevan menettelyn, arvo 20 näkyy välittömässä ikkunassa.

Voit myös määrittää arvot dynaamiselle taulukolle samalla tavalla

12345678910111213 Sub DynamicArray ()'julistaa dynaamisen taulukon, mutta jättää pois sidotut arvotDim IntA () kokonaislukuna'alustaa taulukkoReDim IntA (1--4)IntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näytä taulukon sijainnin 2 tulos välittömässä ikkunassaDebug.PrintIntA (2)End Sub

Array -toiminto

Kuitenkin, vain varianttijoukon kanssa, voit käyttää Array -toimintoa, joka voi olla helpompaa kuin vakiomenetelmän käyttäminen.

12 'täytä taulukkointA () = Array (10, 20, 30, 40)

Täytä joukko silmukalla

Voit myös täyttää taulukkoja kiertämällä Excelin solualueen läpi

1234567891011121314151617 Sub TestDynamicArrayFromExcel ()'julistaa taulukonDim strNames () merkkijonona'ilmoittaa kokonaisluvun alueen rivien laskemiseksiDim n kokonaislukuna'ilmoittaa silmukan kokonaisluvunDim i Kuten kokonaisluku'laske alueen rivitn = Alue ("A1", Alue ("A1"). Loppu (xlDown)). Rivit.Luku'muokkaa taulukko rivien määräksi alueella.ReDim strNames (n)Sillä i = 0 - nstrNames (i) = Alue ("A1"). Siirtymä (i + 1, 0)Seuraavaksi minä'Näytä arvot taulukossaMsgBox Join (strNames ())End Sub

Alusta taulukot uudelleen

Voit alustaa taulukon uudelleen missä tahansa koodin vaiheessa, mutta menetät sitten alkuperäisen arvon, joka sisältyy kyseiseen paikkaan taulukossa.

1234567891011121314 Sub StaticArray ()'ilmoittaa taulukon, jonka LBound -arvo on 1 ja UBound -arvo 4Dim IntA (1-4) kokonaislukuna'alustaa taulukkoIntA (1) = 10IntA (2) = 20IntA (3) = 30IntA (4) = 40'näytä taulukon sijainnin 2 tulos välittömässä ikkunassaDebug.Print IntA (2)'alusta alusta uudelleenintA (2) = 200Debug.Print IntA (2)End Sub

Yllä olevassa esimerkissä Staattinen matriisi säilyttää kaikki arvot paitsi arvon 2 - arvo muuttuu 200: ksi.

ReDimin käyttö

Jos käytät dynaamista taulukkoa, ReDim -lausetta käytetään taulukon koon asettamiseen. Voit myöhemmin käyttää koodissasi olevaa ReDim -lauseketta muuttaaksesi taulukon kokoa niin monta kertaa kuin tarvitset. Alla oleva koodirivi alustaa intA -taulukon uudelleen siten, että sen koko on 2 (Muista - Array -indeksi alkaa nollasta!)

1 ReDim intA (1) kokonaislukuna

Joten koodi, joka sisältää ReDim -lausekkeen, näyttäisi alla olevasta esimerkistä.

1234567891011121314151617 Sub TestDynamicArray ()'julistaa taulukonDim intA () kokonaislukunaReDim intA (2)'täytä taulukko numeroillaintA (0) = 2intA (1) = 5intA (2) = 9'' Näytä numero kohdassa 1Debug.Print intA (1)'muokkaa taulukkoa koon muuttamiseksiReDim intA (3)intA (0) = 6intA (1) = 8'Näytä numero tällä kertaa sijainnissa 1Debug.Print intA (1)End Sub

Jos suoritat yllä olevan menettelyn, arvo 5 näytetään välittömässä ikkunassa ja sitten arvo 8 näytetään, kun olemme muuttaneet taulukon kokoa ReDimin avulla ja täyttäneet sen uudelleen. Koska emme kuitenkaan ole täyttäneet IntA: ta (2) emmekä käyttäneet Re-Dim Preserve -toimintoa, taulukon kyseisen paikan arvo poistetaan ja sekä taulukon sijainnit 3 että 4 ovat nolla.

ReDim Preserve -ohjelman käyttö

Jos käytämme ReDim Preserveä, se säilyttää taulukon alkuperäiset arvot.

1234567891011121314151617 Sub TestDynamicArray ()'julistaa taulukonDim intA () kokonaislukunaReDim intA (2)'täytä taulukko numeroillaintA (0) = 2intA (1) = 5intA (2) = 9'Näytä numero kohdassa 2Debug.Print intA (2)'redimoi taulukkoReDim intA (3)intA (0) = 6intA (1) = 8'näyttää numeron uudelleen kohdassa 2Debug.Print intA (2)End Sub

Molemmissa yllä näytetyissä viestiruuduissa numero 9 näkyy, kun ReDim Preserve -lauseke pitää arvon tässä paikassa.

Tulet auttaa kehittämään sivuston jakaminen sivu ystävillesi

wave wave wave wave wave