De fleste programmeringsspråk støtter arrays, inkludert VBA. En matrise er en gruppe variabler som deler et navn. Du refererer til en spesifikk variabel i matrisen ved å bruke matrisenavnet og et indeksnummer i parentes. Du kan for eksempel definere en matrise med 12 strengvariabler for å inneholde navnene på månedene i året. Hvis du navngir matrisen MonthNames , kan du referere til det første elementet i matrisen som MonthNames (1), det andre elementet som MonthNames (2), og så videre.
Deklarerer matriser
Før du kan bruke en matrise, må du deklarere den. Ingen unntak. I motsetning til normale variabler, er VBA veldig strenge med denne regelen. Du erklærer en matrise med en Dim eller Public-setning, akkurat som du erklærer en vanlig variabel. Du må imidlertid også spesifisere antall elementer i matrisen. Du gjør dette ved å spesifisere det første indeksnummeret, nøkkelordet Til og det siste indeksnummeret - alt innenfor parentes. Følgende eksempel viser hvordan du deklarerer en matrise med 100 heltall:
Dim MyArray(1 til 100) som heltall
Når du erklærer en matrise, kan du velge å spesifisere kun den øvre indeksen. Hvis du utelater den nedre indeksen, antar VBA at den er 0. Derfor erklærer begge de følgende setningene den samme 101-elements matrisen:
Dim MyArray (0 til 100) som heltall
Dim MyArray (100) Som heltall
Hvis du vil at VBA skal anta at 1 (i stedet for 0) er den nedre indeksen for matrisene dine, inkluderer følgende setning i Deklarasjonsdelen øverst i modulen:
Alternativ base 1
Denne setningen tvinger VBA til å bruke 1 som det første indeksnummeret for matriser som kun erklærer den øvre indeksen. Hvis denne setningen er til stede, er følgende setninger identiske, og begge erklærer en 100-elements matrise:
Dim MyArray (1 til 100) som heltall
Dim MyArray (100) Som heltall
Flerdimensjonale arrays
Matrisene opprettet i de foregående eksemplene er alle endimensjonale matriser. Tenk på endimensjonale matriser som en enkelt linje med verdier. Matriser du oppretter i VBA kan ha så mange som 60 dimensjoner - selv om du sjelden trenger mer enn to eller tre dimensjoner i en matrise. Følgende eksempel erklærer en 81-heltallsmatrise med to dimensjoner:
Dim MyArray (1 til 9, 1 til 9) som heltall
Du kan tenke på denne matrisen som en matrise på 9 x 9 – perfekt for å lagre alle tall i et Sudoku-puslespill.
For å referere til et spesifikt element i denne matrisen, må du spesifisere to indeksnummer (ligner på "raden" og "kolonnen" i matrisen). Følgende eksempel viser hvordan du kan tilordne en verdi til et element i denne matrisen:
MyArray (3, 4)= 125
Denne setningen tildeler en verdi til et enkelt element i matrisen. Hvis du tenker på matrisen i form av en 9 x 9 matrise, tildeler dette 125 til elementet i den tredje raden og den fjerde kolonnen i matrisen.
Slik erklærer du en tredimensjonal matrise med 1000 elementer:
Dim My3DArray (1 til 10, 1 til 10, 1 til 10) som heltall
Du kan tenke på en tredimensjonal matrise som en kube. Å visualisere en rekke med mer enn tre dimensjoner er vanskeligere.
Dynamiske arrays
Du kan også lage dynamiske matriser. En dynamisk matrise har ikke et forhåndsinnstilt antall elementer. Deklarer en dynamisk matrise med et tomt sett med parenteser:
Dim MyArray () Som heltall
Før du kan bruke denne matrisen, må du bruke ReDim-setningen for å fortelle VBA hvor mange elementer matrisen har. Vanligvis bestemmes antall elementer i matrisen mens koden kjører. Du kan bruke ReDim-setningen et hvilket som helst antall ganger, endre matrisens størrelse så ofte som nødvendig. Følgende eksempel viser hvordan du endrer antall elementer i en dynamisk matrise. Den forutsetter at NumElements-variabelen inneholder en verdi som koden din har beregnet.
ReDim MyArray (1 til NumElements)
Når du omdimensjonerer en matrise ved å bruke ReDim, sletter du alle verdier som er lagret i matriseelementene. Du kan unngå å ødelegge de gamle verdiene ved å bruke Bevar nøkkelordet. Følgende eksempel viser hvordan du kan bevare en matrises verdier når du omdimensjonerer matrisen:
ReDim Preserve MyArray (1 To NumElements)
Hvis MyArray for øyeblikket har ti elementer, og du utfører den foregående setningen med NumElements som tilsvarer 12, forblir de ti første elementene intakte, og matrisen har plass til ytterligere to elementer (opp til tallet i variabelen NumElements). Hvis NumElements er lik 7, beholdes de første syv elementene, men de resterende tre elementene går bort.