Excel VBA-arrayer: Typer og hvordan de brukes med eksempel

⚡ Smart oppsummering

Excel VBA-matriser lagrer en gruppe relaterte verdier av samme datatype under ett navn, som nås via en indeks. Denne siden forklarer statiske og dynamiske matriser, en-, to- og flerdimensjonale matriser, deklarasjonssyntaks og et eksempel på drikkevareinnlasting.

  • 📦 Array-konsept: En enkelt navngitt minneplassering som inneholder mange verdier av samme datatype, atskilt med en indeks.
  • 🎯 Fordeler: Matriser grupperer relaterte data, reduserer antallet variabler og gjør henting og sortering av data raskere.
  • 📌 Statisk array: Deklarert med en fast størrelse, for eksempel Dim ArrayMonth(12) As String, når elementantallet er kjent.
  • 🔄 Dynamisk array: Deklarert tom med Dim ArrayMonth() og størrelsesendt senere med ReDim når elementantallet er ukjent.
  • 📐 Mål: En matrise bruker én, to eller flere indekser til å modellere enkeltlister, tabeller eller data på flere nivåer.
  • 🧪 Utarbeidet eksempel: En kommandoknapp laster inn fire drikkenavn fra en matrise i regnearkceller ved hjelp av Sheet1.Cells.

Excel VBA-matriser

Hva er VBA Array?

En matrise er definert som en minneplassering som kan lagre mer enn én verdi. Verdiene må alle være av samme datatype. La oss si at du vil lagre en liste over favorittdrikkene dine i en enkelt variabel, du kan bruke VBA-array for å gjøre det.

Ved å bruke en matrise kan du referere til de relaterte verdiene med samme navn. Du kan bruke en indeks eller et abonnement for å skille dem fra hverandre. De individuelle verdiene omtales som elementene i Excel VBA-matrisen. De er sammenhengende fra indeks 0 til den høyeste indeksverdien.

Denne opplæringen forutsetter at du bruker Microsoft Excel versjon 2013. Kunnskapen gjelder fortsatt andre versjoner av Microsoft Excel også.

Hva er fordelene med arrays?

Før du skriver arraykode, er det nyttig å forstå hvorfor arrayer er verdt å bruke. Følgende er noen av fordelene som tilbys av VBA-arrayfunksjoner.

  1. Grupper logisk relaterte data sammen – la oss si at du vil lagre en liste over elever. Du kan bruke en enkelt array-variabel som har separate plasseringer for elevkategorier, dvs. barnehage, grunnskole, videregående skole, videregående skole osv.
  2. Arrays gjør det enkelt å skrive vedlikeholdbar kode. For de samme logisk relaterte dataene lar den deg definere en enkelt variabel, i stedet for å definere mer enn én variabel.
  3. Bedre ytelse – når en matrise er definert, er det raskere å hente, sortere og endre data.

Typer matriser i VBA

VBA støtter to typer arrays nemlig;

  • Statisk – Disse typene arrays har et fast forhåndsbestemt antall elementer som kan lagres. Man kan ikke endre størrelsen på datatypen til en statisk array. Disse er nyttige når du vil jobbe med kjente enheter som antall dager i uken, kjønn osv.For eksempel: Dim ArrayMonth(12) Som streng
  • Dynamisk – Disse typene arrays har ikke et fast forhåndsbestemt antall elementer som kan lagres. Disse er nyttige når du arbeider med enheter som du ikke kan forhåndsbestemme antallet.For eksempel: Dim ArrayMonth() Som variant

Når du vet hvilken type som passer til dataene dine, er neste trinn deklarasjonssyntaksen for hver.

Syntaks for å deklarere matriser

Statiske arrays

Syntaksen for å deklarere STATISK arrays er som følger:

Dim arrayName (n) as datatype

HER,

Code Handling
Dim arrayName (n) datatype
  1. Den erklærer en array-variabel kalt arrayName med størrelsen n og datatype. Størrelse refererer til antall elementer som matrisen kan lagre.

Dynamiske matriser

Syntaksen for å deklarere DYNAMISK arrays er som følger:

Dim arrayName() as datatype
ReDim arrayName(4)

HER,

Code Handling
Dim arrayName () datatype
  1. Den erklærer en matrisevariabel kalt arrayName uten å spesifisere antall elementer
ReDim arrayName(4)
  1. Den spesifiserer matrisestørrelsen etter at matrisen er definert.

Matrisedimensjoner

En matrise kan være én dimensjon, to dimensjoner eller flerdimensjonal.

  • En dimensjon: I denne dimensjonen bruker matrisen bare én indeks. For eksempel et antall mennesker i hver alder.
  • To dimensjoner: I denne dimensjonen bruker matrisen to indekser. For eksempel et antall elever i hver klasse. Det krever antall klasser og elevnummer i hver klasse
  • Multidimensjon: I denne dimensjonen bruker matrisen mer enn to indekser. For eksempel temperaturer på dagtid. ( 30, 40, 20).

Hvordan bruke Array i Excel VBA

Med teorien dekket, kan vi sette en array i arbeid i en ekte arbeidsbok. Vi skal lage et enkelt program. Dette programmet fyller et Excel-ark med data fra en arrayvariabel. I dette VBA-array-eksemplet skal vi gjøre følgende.

  • Lage en ny Microsoft Excel-arbeidsbok og lagre den som Excel Macro-Enabled Workbook (*.xlsm)
  • Legg til en kommandoknapp i arbeidsboken
  • Angi navn og bildetekstegenskaper for kommandoknappen
  • Programmering av VBA som fyller Excel-arket

La gjøre denne øvelsen trinn for trinn,

Trinn 1 – Opprett en ny arbeidsbok

  1. Open Microsoft Excel
  2. Lagre den nye arbeidsboken som VBA Arrays.xlsm

Trinn 2 – Legg til en kommandoknapp

OBS: Denne delen forutsetter at du er kjent med prosessen med å lage et grensesnitt i excel. Hvis du ikke er kjent, les veiledningen VBA Excel-skjemakontroll og ActiveX-kontroll. Den vil vise deg hvordan du lager grensesnittet

  1. Legg til en kommandoknapp på arket

Bruk Array i Excel VBA

  1. Sett name-egenskapen til cmdLoadBeverages
  2. Sett egenskapen for bildetekst til Last inn drikkevarer

GUI-en din skal nå være som følger

Bruk Array i Excel VBA

Trinn 3 – Lagre filen

  1. Klikk på lagre som-knappen
  2. Velg Excel Macro-Enabled Workbook (*.xlsm) som vist i bildet nedenfor

Bruk Array i Excel VBA

Trinn 4 – Skriv koden

Vi skal nå skrive koden for søknaden vår

  1. Høyreklikk på Last inn drikker-knappen og velg vis kode
  2. Legg til følgende kode i klikkhendelsen til cmdLoadBeverages
Private Sub cmdLoadBeverages_Click()
    Dim Drinks(1 To 4) As String

    Drinks(1) = "Pepsi"
    Drinks(2) = "Coke"
    Drinks(3) = "Fanta"
    Drinks(4) = "Juice"

    Sheet1.Cells(1, 1).Value = "My Favorite Beverages"
    Sheet1.Cells(2, 1).Value = Drinks(1)
    Sheet1.Cells(3, 1).Value = Drinks(2)
    Sheet1.Cells(4, 1).Value = Drinks(3)
    Sheet1.Cells(5, 1).Value = Drinks(4)
End Sub

HER,

Code Handling
Dim drinker (1 til 4) som streng
  • Den erklærer en matrisevariabel kalt Drinks. Den første array-indeksen er 1 og den siste array-indeksen er 4.
Drinker(1) = "Pepsi"
  • Tildeler verdien Pepsi til det første array-elementet. Den andre lignende koden gjør det samme for de andre elementene i matrisen.
Sheet1.Cells(1, 1).Value = «Mine favorittdrikker»
  • Skriver verdien Mine favorittdrikker i celleadresse A1. Ark1 refererer til arket, og Cells(1,1) refererer til rad nummer 1 og kolonne 1 (B)
Ark1.Celler(2, 1).Verdi = Drikke(1)
  • Skriver verdien til matriseelementet med indeks 1 til rad nummer to i kolonne 1

Testing av søknaden vår

Når koden er på plass, er det siste trinnet å kjøre knappen og bekrefte at arrayet fyller arket. Velg utvikler-fanen og sørg for at Designmodus-knappen er «av». Indikatoren er at den vil ha en hvit bakgrunn og ikke en farget (grønnaktig) bakgrunn. (Se bildet nedenfor)

Teste en applikasjon i Excel VBA

Klikk på Last inn drikker-knappen

Du vil få følgende resultater

Teste en applikasjon i Excel VBA

Last ned Excel som inneholder koden ovenfor

Last ned Excel-filen ovenfor Code

Spørsmål og svar

En statisk array har en fast størrelse satt ved deklarasjon, for eksempel Dim Arr(12). En dynamisk array deklareres tom med Dim Arr() og skaleres senere ved hjelp av ReDim når antallet elementer ikke er kjent på forhånd.

ReDim angir eller endrer størrelsen på en dynamisk array etter at den er deklarert. Hvis du legger til nøkkelordet Preserve, som i ReDim Preserve Arr(10), beholdes de eksisterende verdiene mens du endrer størrelsen; uten Preserve slettes alle lagrede verdier.

Bruk funksjonene LBound og UBound. LBound returnerer den laveste indeksen og UBound returnerer den høyeste indeksen. Antall elementer er lik UBound(Arr) minus LBound(Arr) pluss én, som fungerer for både statiske og dynamiske arrayer.

Ja. AI-assistenter som Copilot genererer arraydeklarasjoner og løkker fra en vanlig forespørsel, for eksempel laster de inn ti produktnavn i en kolonne. Utvikleren limer inn koden i editoren og tester den på en kopi av arbeidsboken.

Ja. AI-assistenter leser feilen «Subscript out of range» og koden, peker deretter på indeksen som overskrider arraygrensene og foreslår en løsning, for eksempel å justere ReDim-størrelsen eller løkketelleren. Utvikleren bruker og tester det på nytt.

Oppsummer dette innlegget med: