Array

Du bør først fullføre Litt om delene i et VBA-program før du ser på denne leksjonen

Array gir deg mulighet til å lagre mer enn ett element i én variabel eller beholder som du kan bruke i programmet. Du kan tenke på en Array som en stor boks med et endelig antall mindre bokser i den. Hver liten boks vil lagre en verdi avhengig av datatypen til Array. Du kan velge hvor mange små bokser du vil lagre i Array når du oppretter den. Du bør bruke Array når du må lagre flere relaterte elementer av samme datatype.

Strukturert lagring av data

Array er en liste med elementer. Et klassisk eksempel på en Array er en liste med oppgaver. Papiret der du skriver ned oppgavene er en beholder. Denne beholderen vil inneholde flere tekststrenger, og hver av disse tekststrengene vil inneholde en oppgave som du skal utføre. På samme måte kan du opprette et papir i VBA-programmet i form av en Array. Du kan definere en Array ved hjelp av en rekke teknikker, men hver av disse teknikkene vil ha like tilnærminger.

Eksempel

Option Base 0

 

Public Sub Endimensjonal_Array()

‘Deklarer en tekststreng for utdata.

Dim UtData As String

‘Deklarerer en variant for lagring av de enkelte tekststrengene.

Dim IndividuellStreng As Variant

‘Deklarerer en array for tekststrenger.

Dim StrengArray(5) As String

‘Fyller hver element i array’n med informasjon

StrengArray(0) = “Dette”

StrengArray(1) = “er”

StrengArray(2) = “en”

StrengArray(3) = “Array”

StrengArray(4) = “med”

StrengArray(5) = “strenger”

‘Bruker For Each…Next setningen for å hente elementer og legge det i en tekststreng.

For Each IndividuellStreng In StrengArray

‘Oppretter en enkel tekststreng for utdata som består av elementene i array’n.

UtData = UtData + IndividuellStreng + ” “

Next

‘Viser resultatet.

MsgBox Trim(UtData), vbInformation Or vbOKOnly, “Innhold av Array”

End Sub

Hvis du ser på koden ovenfor, vil du se at koden starter med Option Base 0. Dette vil fortelle VBA om den skal begynne å telle elementene i Array fra 0 eller 1. Standardinnstillingen i VBA er at elementene i Array telles fra 0. De fleste programmeringsspråk vil bruke 0 som utgangspunkt, og det er av denne grunn at utviklerne hos Microsoft har gjort 0 som standard for VBA. Eldre versjoner av VBA bruker 1 som utgangspunkt.

Hvis du vil at programmet skal fungere i alle miljøer, bør du ta med Option Base-setningen. Siden Array vil begynne på 0 og ikke på 1, kan du lagre seks elementer i Array, vi teller fra og med 0 til og med 5, og det blir 6 elementer.

Array-typer

Man kan klassifisere en Array på flere måter, og den første metoden er datatypen som Array vil inneholde. En Array med tekststrenger er svært forskjellig fra en Array med heltalls, men matrisen vil alltid sikre at elementene er unike. Hvis du bruker datatypen Variant, kan du blande datatypene i en Array. Du bør alltid være forsiktig når du bruker denne teknikken, siden det kan føre til feil som er vanskelig å finne.

En annen metode er å definere dimensjonene i en Array. Dimensjonen definerer antall retninger som Array skal lagre informasjonen i. En enkel liste, er et eksempel på en en-dimensjonal Array. En tabell som består av kolonner og rader, er en to-dimensjonal matrise. Man kan opprette en Array med et hvilket som helst antall dimensjoner.

Eksempel Legge til et element i  en Array

Sub En_Array_som_Variant()

    Dim A As Range

    Dim Arr As Variant ‘En variabel av typen Variant (ikke definert som Array)

    For Each A In Range(“A1:A10”).Cells

        If IsEmpty(Arr) Then

            Arr = Array(A.Value) ‘Variabelen arr defineres som Array med ett element

            Else

            ReDim Preserve Arr(UBound(Arr) + 1)  ‘Legg til neste element i Array

            Arr(UBound(Arr)) = A.Value  ‘Tilordner elementet i Array en verdi

        End If

        Debug.Print A.Value ‘Skriver ut verdien av elementet i vinduet Immediate

    Next

End Sub

VBA Array

I denne delen skal vi se på trinnene du kan følge for å lage en Array.

Steg 1 – Opprett en ny arbeidsbok

  1. Åpne Microsoft Excel.
  2. Lagre Excel-arbeidsboken med filtypen xlsm (makroaktivert).

Steg 2 – Legg til en kommandoknapp

  1. Legg til en kommandoknapp i det aktive regnearket.

  1. Høyreklikk på knappen og velg Egenskaper.
  2. Sett egenskapen Name til cmd_Hent_Drikker.
  3. Sett egenskapen Caption til Hent drikker.

Grensesnittet skal nå vise følgende:

Steg 3 – Lagre filen

Du bør nå klikke Lagre som.

Steg 4 – Skriv inn koden

La oss nå skrive koden for Sub.

Høyreklikk på kommandoknappen og velg Vis kode.

Legg til koden under i kodevinduet.

Dim Drikker(1 To 4) As String

Drikker(1) = “Melk”

Drikker(2) = “Vann”

Drikker(3) = “Kaffe”

Drikker(4) = “Saft”

With Ark1

.Cells(1, 1).Value = “Mine favoritt drikker”

.Cells(2, 1).Value = Drikker(1)

.Cells(3, 1).Value = Drikker(2)

.Cells(4, 1).Value = Drikker(3)

.Cells(5, 1).Value = Drikker(4)

End With

Kodevinduet

Steg 5 – Kjøre koden

Gå tilbake til arket med kommandoknappen og trykk på denne. Du vil nå sannsynligvis få et resultat som likner på dette:

Ekesempel Karakterer

Uten Array

I eksempelet nedenfor vil vi se på hvordan du kan skrive inn karakterene for hver student uten å bruke en array.

Public Sub Student_Karakterer()

With ThisWorkbook.Worksheets(«Ark1»)

‘Deklarerer en variabel for hver student

Dim Student1 As String

Dim Student2 As String

Dim Student3 As String

Dim Student4 As String

Dim Student5 As String

‘Leser karakterer fra celler

Student1 = .Range(«C1»).Offset(1, 0)

Student2 = .Range(«C1»).Offset(2, 0)

Student3 = .Range(«C1»).Offset(3, 0)

Student4 = .Range(«C1»).Offset(4, 0)

Student5 = .Range(«C1»).Offset(5, 0)

‘Skriver ut karakterer til vinduet Immediate

Debug.Print «Karakterer for studenter»

Debug.Print Student1

Debug.Print Student2

Debug.Print Student3

Debug.Print Student4

Debug.Print Student5

End With

End Sub

Utskriften til vinduet Immediate ser slik ut i dette tilfelle:

LBound og UBound

  • Bruk LBound-funksjonen for å finne den nedre grensen for en array. Syntaks: LBound(arraynavn, [dimensjon]).
  • Bruk UBound-funksjonen til å finne den øvre grensen for en array. Syntaks: UBound(arraynavn, [dimensjon]).
  • [dimensjon] Denne forteller VBA hvilken dimensjon som det refereres til. Hvis denne er tom så brukes 1 som dimensjon.

Eksempel

Dim MinArray(1 To 10) ‘Deklarer array variabler i en en-dimensjonal array.

Dim Øvre as long, Nedre as long

Øvre = LBound(MinArray,1)  ‘Returnerer 1.

Nedre = UBound(MinArray, 1)  ‘Returnerer 10.

Med Array

Public Sub Student_Karakterer_Arr()

With ThisWorkbook.Worksheets(“Ark1”)

‘Deklarerer en Array som skal lagre karakterer for fem studenter

Dim Studenter(1 To 5) As String

‘Leser karakterer fra cellene C2:C6 til Array

Dim i As Integer

For i = 1 To 5

Studenter(i) = .Range(“C1”).Offset(i)

Next i

‘Skriver ut karakterene til vinduet Immediate

Debug.Print “Karakterer for studenter”

For i = LBound(Studenter) To UBound(Studenter)

Debug.Print Studenter(i)

Next i

End With

End Sub

Legg merke til forskjellen i variabler som brukes i de to programmene, og legg også merke til lengden på programmet.

Eksempel med løkke

Public Sub Array_Loops()

‘Deklarerer en array

Dim ArrMerker(0 To 5) As Long

‘Fyller array med tilfeldige tall

Dim i As Long

For i = LBound(ArrMerker) To UBound(ArrMerker)

    ArrMerker(i) = 5 * Rnd

Next i

‘Skriver ut verdiene til vinduet Immediate

Debug.Print “Lokasjon”, “Verdi”

For i = LBound(ArrMerker) To UBound(ArrMerker)

    Debug.Print i, ArrMerker(i)

Next i

End Sub

Eksempel To-dimensjonal array

Public Sub To_Dim_Array()

  ‘Deklarerer en to-dimensjonal array

    Dim ArrMerker(0 To 3, 0 To 2) As String

‘Fyller array med tekst fra verdiene til i og j

    Dim i As Long, j As Long

    For i = LBound(ArrMerker) To UBound(ArrMerker)

        For j = LBound(ArrMerker, 2) To UBound(ArrMerker, 2)

            ArrMerker(i, j) = CStr(i) & “:” & CStr(j)

        Next j

    Next i

    ‘Skriver ut verdiene til vinduet Immediate

    Debug.Print “i”, “j”, “Verdi”

    For i = LBound(ArrMerker) To UBound(ArrMerker)

        For j = LBound(ArrMerker, 2) To UBound(ArrMerker, 2)

            Debug.Print i, j, ArrMerker(i, j)

        Next j

    Next i

End Sub

Resulatet av å kjøre programmet vil bli slik:

 

 

 

Tilbake til:Det Ultimate VBA Kurset Del 2
Meny
Nettstedet er under arbeidI drift i løpet høsten 2019