Järjestä muuttujat käyttämällä VBA: ta Microsoft Excel 2010: ssä

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"

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

wave wave wave wave wave