Hvordan bruke Excel VBA Array?
Du kan kjøre makroene enten fra Visual Basic Editor ved å plassere markøren i makroen og trykke på F5 -tasten, eller fra Excel ved å åpne dialogboksen Makroer (ALT+F8) velge makroen du vil kjøre og klikke på Kjør. Det er best å kjøre disse makroene fra Visual Basic Editor ved å bruke Debug> Trinn inn (ved å trykke F8) slik at du kan se dem mens de fungerer. Instruksjon Hvis Utvikler -fanen ikke er i båndet …
- Åpne Excel.
- Gå til VBA Editor (trykk Alt + F11)
- Gå til Umiddelbart vindu. (Ctrl + G)
- Skriv koden nedenfor.
- Application.ShowDevTools = True
Slik setter du inn VBA -kode i Excel
- Gå til Utvikler Tab> Kode Gruppe> Visual Basic
- Klikk Sett inn > Modul.
- Vil åpne en tom modul for deg.
- Skriv / Lim inn den oppgitte koden i den modulen
Slik kjører du VBA -kode i Excel
- Velg hvor som helst mellom koden, Sub… End Sub
- Klikk på Kjør & Kjør Sub eller F5
Statiske matrisvariabler
I stedet for å bruke flere unike variabler til å lagre informasjon, kan du bruke en matrisevariabel.
Når du vet hvor mange elementer du trenger å lagre i matrisen, kan du bruke en statisk matrisevariabel som denne:
Kode
Sub TestStaticArray ()
'lagrer 10 navn i arbeidsboken i matrisvariabelen MyNames ()
Dim MyNames (1 To 10) As String 'erklærer en statisk matrisevariabel
Dim iCount som heltall
For iCount = 1 Til ThisWorkbook.Sheets.Count
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Debug.Print MyNames (iCount)
Neste iCount
Erase MyNames () 'sletter variabelinnholdet, frigjør litt minne
Slutt Sub
Dekode
Dim MyNames (1 til 10) As String
Vi har dimensjons-ize en eneste veriable MyNames som en streng, som kan inneholde 10 elementer i den. Så MyNames veriable er en Array -type.
Dim iCount som heltall
Vi har erklært en enkelt variabel iCount som et heltall, som bare kan inneholde Numeric Integer type Value
For iCount = 1 Til ThisWorkbook.Sheets.Count
ThisWorkbook.Sheets.Count gir oss antall ark i en arbeidsbok. ThisWorkbook, refererer til arbeidsboken, der koden ble skrevet.
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
Ved å bruke en sløyfe tildeler vi hvert ark navn til en eneste verifierbar kalt MyNames. MyNames er en Array -type som kan verifiseres, så den lagrer hvert arknavn i hvert element.
Debug.Print MyNames (iCount)
Like etter at verdien er tilordnet hvert element i en matrise, vil den skrive ut den samme i ImmediateWindow, bydefault nederst i VBA -vinduet. Du kan se tildeling av hver verdi og vise verdien i ImmediateWindow.
Neste iCount
Neste brukes til å fortelle For Loop i Excel VBA, om å gjenta den samme oppgaven igjen, ved å øke iCount -telleren, til iCount nådde Totalt antall ark, i arbeidsboken.
Dynamiske matrisevariabler
Dynamiske matrisevariabler er nyttige når du på forhånd ikke vet hvor mange elementer du trenger for å lagre informasjon om.
Du erklærer dynamiske matrisvariabler akkurat som en statisk matrisevariabel, bortsett fra at du ikke gir informasjon om matrisestørrelsen.
I eksemplet ovenfor (Dim MyNames (1 til 10) As String) hvis Antall ark større enn 10, vil det gjennom en feil, ettersom MyNames ikke kan lagre mer enn 10 varer.
Kode
Sub TestDynamicArray ()
'lagrer alle navnene i arbeidsboken i matrisevariabelen MyNames ()
Dim MyNames () As String 'erklærer en dynamisk array -variabel
Dim iCount som heltall
Dim Max Som Heltall
Max = ThisWorkbook.Sheets.Count 'finner maksimal matrisestørrelse
ReDim MyNames (1 To Max) 'erklærer matrisevariabelen med nødvendig størrelse
For iCount = 1 Til maks
MyNames (iCount) = ThisWorkbook.Sheets (iCount) .Name
MsgBox MyNames (iCount)
Neste iCount
Erase MyNames () 'sletter det varierbare innholdet, frigjør litt minne
Slutt Sub
Dekode
Dim MyNames () som streng
Vi har dimensjons-ize en eneste veriabel MyNames som en streng, som er en Array-type, på grunn av åpen og lukk Paranthesis, etter det pålitelige navnet, men vil ikke kunne lagre data i den, ettersom vi ikke har gitt dens øvre nivå.
ReDim MyNames (1 til maks)
Redim brukes til å dimensjonere i matrisen. Det vil nå tilordne det øvre nivået av Array Type Veriable.
I dette tilfellet totalt antall ark i arbeidsboken (maks = ThisWorkbook.Sheets.Count)
MsgBox MyNames (iCount)
I siste eksempel har vi skrevet ut verdien i variabler i umiddelbar vindu, denne gangen skriver vi ut verdien i en MessageBox, som vil se slik ut …
Hvis du vet at du trenger en matrisevariabel med 1000 elementer, bruker du en statisk variabel. Ulempen er at du vil bruke minne til 1000 elementer hver gang, også i tilfeller du bare lagrer informasjon om 10 elementer. Hvis du bruker en dynamisk array -variabel, vil du bruke minnet mer effektivt.
Noen ganger er det ikke mulig å beregne hvor stor matrisevariabelen må være. I disse tilfellene må størrelsen på matrisevariabelen økes etter behov. Når du bruker en ReDim-erklæring for å endre størrelsen på matrisevariabelen, blir variabelinnholdet også slettet for å unngå å slette variabelinnholdet når du Redim array -variabelen du må bruke ReDim Preserve-uttalelse.
Kode
Sub GetFileNameList ()
'lagrer alle filnavnene i gjeldende mappe
Dim FolderFiles () As String 'erklærer en dynamisk array -variabel
Dim tmp As String, fCount As Integer
fCount = 0
tmp = Dir ("D: \ Test \*.*")
Mens tmp Tom
fCount = fCount + 1
ReDim Preserve FolderFiles (1 til fCount)
'erklærer matrisvariabelen igjen (størrelse+1)
FolderFiles (fCount) = tmp
tmp = Dir
Wend
MsgBox fCount & "filnavn finnes i mappen" & CurDir
Erase FolderFiles 'sletter det varierbare innholdet, frigjør litt minne
Slutt Sub
Dekode
Dim FolderFiles () Som streng
Vi har dimensjons-ize en enkelt verifiserbar FolderFiles som en streng, som er en Array-type, på grunn av åpen og lukk Paranthesis, etter det veriable navnet, men vil ikke kunne lagre noen data i den, ettersom vi ikke har gitt dens øvre nivå.
tmp = Dir ("D: \ Test \*.*")
Dir -kommandoen fungerer som en utforsker, som kan inneholde navnet på alle filer og mapper i en katalog. Du kan også begrense alle filer til noen spesifikke kriterier. Dir ("D: \ Test \*. Pdf") begrenser fra alle filer til bare PDF -filer eller utvidelser.
Mens tmp Tom
I stedet for For loop i Excel VBA, denne gangen gjentar vi den samme handlingen ved hjelp av Excel VBA WILE LOOP, der kriterier for å avslutte loop ble satt som tmp ikke lik tom. Så til det var noen verdi i tmp veriable, loop vil fungere.
ReDim Preserve FolderFiles (1 til fCount)
Arrayveriable FolderFiles har ikke noe øvre nivå i utgangsposisjonen. Men for hver repetisjon vil det øke det øvre nivået med ReDim -kommando. I første runde 1, deretter 2 … og så videre, til fCount. Men for hver gang du øker det øvre nivået, mister det alle allerede tildelte variabler. Ved å bruke kommandoen Bevar kan vi beholde eller lagre den allerede tildelte verdien.
Wend
Wend pleide å fortelle For Loops i VBA, om å gjenta den samme oppgaven igjen, til kriteriene oppfylte.
MsgBox fCount & "filnavn finnes i mappen" & CurDir
Ved hver repetisjon vil fcout øke med +1, og den endelige verdien vil ha mange filer som finnes i den katalogen / mappen. CurDir -kommandoen gir navnet på den nåværende katalogen. I dette tilfellet “D: \ Test”