Kuinka käyttää Excel VBA Arraya?
Voit suorittaa makroja joko Visual Basic Editorissa asettamalla kohdistimen makroon ja painamalla F5 -näppäintä tai Excelistä avaamalla Makrot -valintaikkunan (ALT+F8) valitsemalla suoritettavan makron ja napsauttamalla Suorita. On parasta suorittaa nämä makrot Visual Basic Editorista käyttämällä Virheenkorjaus> Astu sisään (painamalla F8) jotta voit seurata niiden toimintaa. Ohje Jos Kehittäjä -välilehti ei ole valintanauhassa …
- Avaa Excel.
- Siirry VBA -editoriin (paina Alt + F11)
- Siirry välittömään ikkunaan. (Ctrl + G)
- Kirjoita koodi alle.
- Application.ShowDevTools = Totta
Kuinka lisätä VBA -koodi Exceliin
- Mene Kehittäjä Sarkain> Koodi Ryhmä> Visual Basic
- Klikkaus Lisää > Moduuli.
- Avaa tyhjän moduulin sinulle.
- Kirjoita / liitä annettu koodi tähän moduuliin
Kuinka suorittaa VBA -koodi Excelissä
- Valitse mistä tahansa koodin välistä, Sub… End Sub
- Napsauta Suorita & Suorita Sub tai F5
Staattiset matriisimuuttujat
Sen sijaan, että käyttäisit useita ainutlaatuisia muuttujia tietojen tallentamiseen, voit käyttää taulukkomuuttujaa.
Kun tiedät kuinka monta elementtiä sinun on tallennettava taulukkoon, voit käyttää staattista taulukkomuuttujaa seuraavasti:
Koodi
AlatestiStaticArray ()
'tallentaa 10 nimeä työkirjaan taulukkomuuttujassa MyNames ()
Dim MyNames (1-10) merkkijonona 'ilmoittaa staattisen taulukon muuttujan
Dim iCount kokonaislukuna
ICount = 1 tähän työkirjaan.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nimi
Virheenkorjaus Tulosta MyNames (iCount)
Seuraava iCount
Erase MyNames () 'poistaa muuttujan sisällön, vapauttaa muistia
End Sub
Dekoodaa
Dim MyNames (1-10) merkkijonona
Meillä on ulottuvuus-out yksi todennettavissa oleva MyNames merkkijonona, johon mahtuu 10 kohdetta. Joten MyNames veriable on Array -tyyppi.
Dim iCount kokonaislukuna
Olemme ilmoittaneet yhden muuttujan iCount kokonaislukuna, joka voi sisältää vain numeerisen kokonaisluvun arvon
ICount = 1 tähän työkirjaan.Sheets.Count
ThisWorkbook.Sheets.Count antaa meille työkirjan arkkien määrän. Tämä työkirja viittaa työkirjaan, johon koodi on kirjoitettu.
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nimi
Silmukan avulla annamme jokaisen arkin nimen yhdelle todennettavalle nimeltä MyNames. MyNames on Array -tyyppinen todennettavissa oleva, joten se tallentaa jokaisen taulukon nimen jokaiseen taulukon kohteeseen.
Virheenkorjaus Tulosta MyNames (iCount)
Juuri sen jälkeen, kun olet määrittänyt arvon jokaiselle taulukon kohteelle, se tulostaa saman ImmediateWindow -ohjelmassa, oletusarvoisesti VBA -ikkunan alareunassa. Voit tarkastella kunkin arvon määritystä ja näyttää sen arvon ImmediateWindow -ikkunassa.
Seuraava iCount
Seuraava käytetään kertomaan For Loopille Excel VBA: ssa, toistamaan sama tehtävä uudelleen lisäämällä iCount -laskuria, kunnes iCount saavutti työkirjan arkkien kokonaismäärän.
Dynaamiset matriisimuuttujat
Dynaamiset matriisimuuttujat ovat hyödyllisiä, kun et tiedä etukäteen, kuinka monta elementtiä sinun on tallennettava tiedot.
Ilmoitat dynaamiset taulukkomuuttujat aivan kuten staattinen taulukkomuuttuja, paitsi että et anna mitään tietoja taulukon koosta.
Yllä olevassa esimerkissä (Dim MyNames (1-10) merkkijonona) Jos arkkien lukumäärä on yli 10, se tapahtuu virheen vuoksi, koska MyNames ei voi tallentaa enempää kuin 10 kohdetta.
Koodi
Sub TestDynamicArray ()
'tallentaa kaikki työkirjan nimet matriisimuuttujaan MyNames ()
Dim MyNames () merkkijonona 'ilmoittaa dynaamisen taulukon muuttujan
Dim iCount kokonaislukuna
Dim Max kokonaislukuna
Max = ThisWorkbook.Sheets.Count 'löytää suurimman taulukon koon
ReDim MyNames (1 to Max) 'ilmoittaa tarvittavan kokoisen taulukkomuuttujan
ICount = 1 - enintään
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Nimi
MsgBox MyNames (iCount)
Seuraava iCount
Erase MyNames () 'poistaa sisällön, vapauttaa muistia
End Sub
Dekoodaa
Dim MyNames () merkkijonona
Meillä on ulottuvuus-yksi yksittäinen todennettavissa oleva MyNames merkkijonona, joka on Array-tyyppi, avoimen ja sulkevan paranteesin vuoksi todennettavan nimen jälkeen, mutta emme voi tallentaa siihen mitään tietoja, koska emme ole antaneet sen ylempää tasoa.
ReDim MyNames (1 to Max)
Redimiä käytetään matriisin mitoittamiseen uudelleen, ja se määrittää nyt matriisityypin muuttujan ylemmän tason.
Tässä tapauksessa työkirjan arkkien kokonaismäärä (Max = ThisWorkbook.Sheets.Count)
MsgBox MyNames (iCount)
Viimeisessä esimerkissä olemme tulostaneet arvon muuttujiin välittömässä ikkunassa, tällä kertaa tulostamme arvon MessageBoxiin, joka näyttää tältä …
Jos tiedät, että tarvitset taulukkomuuttujan, jossa on 1000 kohdetta, käytä staattista muuttujaa. Huonona puolena on, että käytät muistia 1000 kohteelle joka kerta, myös silloin, kun tallennat tietoja vain 10 tuotteesta. Jos käytät dynaamista taulukkomuuttujaa, käytät muistia tehokkaammin.
Joskus ei ole mahdollista laskea, kuinka suuri taulukkomuuttujan on oltava. Näissä tapauksissa taulukon muuttujan kokoa on lisättävä tarpeen mukaan. Kun käytät a ReDim-lausuma muuttaa taulukon muuttujan kokoa, muuttujan sisältö poistetaan myös, jotta muuttujan sisältöä ei poisteta, kun Redim matriisimuuttuja, jota sinun on käytettävä ReDim Säilytä-lausunto.
Koodi
Osa GetFileNameList ()
'tallentaa kaikki tiedostonimet nykyiseen kansioon
Dim FolderFiles () merkkijonona 'ilmoittaa dynaamisen taulukon muuttujan
Dim tmp merkkijonona, fCount As Integer
fLuku = 0
tmp = Dir ("D: \ Test \*.*")
Vaikka tmp tyhjä
fLuku = fLuku + 1
ReDim säilyttää kansion tiedostot (1 to fCount)
'ilmoittaa taulukon muuttujan uudelleen (koko+1)
FolderFiles (fCount) = tmp
tmp = Ohj
Lähteä
MsgBox fCount & "tiedostonimet löytyvät kansiosta" & CurDir
Erase FolderFiles 'poistaa sisällön, vapauttaa muistia
End Sub
Dekoodaa
Himmennä FolderFiles () merkkijonona
Meillä on dimensio-ize yksi todennettava FolderFiles merkkijonona, joka on Array-tyyppi, avoimen ja sulkevan paranteesin vuoksi todennettavan nimen jälkeen, mutta emme voi tallentaa siihen mitään tietoja, koska emme ole antaneet sen ylempää tasoa.
tmp = Dir ("D: \ Test \*.*")
Dir -komento toimii tutkimusmatkailijana, joka voi sisältää hakemiston kaikkien tiedostojen ja kansioiden nimet. Voit myös rajoittaa kaikki tiedostot tiettyihin kriteereihin. Dir ("D: \ Test \*. Pdf") rajoittaa kaikista tiedostoista vain PDF -tiedostoihin tai laajennuksiin.
Vaikka tmp tyhjä
Excel VBA -silmukan sijaan tällä kertaa toistamme saman toiminnon käyttämällä Excel VBA WHILE LOOP -toimintoa, jossa silmukan lopetuskriteeriksi asetettiin tmp, joka ei ole sama kuin tyhjä. Joten kunnes tmp -todennettavissa oleva arvo oli, silmukka toimii.
ReDim säilyttää kansion tiedostot (1 to fCount)
Array -todennettavissa olevissa FolderFiles -tiedostoissa ei ole ylempää tasoa lähtöasennossa. Mutta jokaisessa toistossa se lisää ylempää tasoaan ReDim -komennolla. Ensimmäisellä ajolla 1, sitten 2… ja niin edelleen, kunnes fCount. Joka kerta, kun ylempää tasoa nostetaan, se menettää kaikki jo määritetyt muuttujat. Käyttämällä Säilytä -komentoa voimme pitää tai tallentaa jo määritetyn arvon.
Lähteä
Wendillä oli tapana kertoa For Loopsille VBA: ssa, toistaa sama tehtävä uudelleen, kunnes kriteerit täyttyvät.
MsgBox fCount & "tiedostonimet löytyvät kansiosta" & CurDir
Jokaisella toistolla fcout kasvaa +1, ja sen lopullinen arvo lisää kyseisestä hakemistosta / kansiosta löytyvien tiedostojen määrää. CurDir -komento antaa nykyisen hakemiston nimen. Tässä tapauksessa "D: \ Test"