excel vba array array methods with examples
Denne tutorial forklarer VBA Array, forskellige arraytyper, variant array og array metoder ved hjælp af programmeringseksempler:
En almindelig VBA-variabel er en pladsholder, der gemmer værdien af en enkelt data. Det har en 1 til 1 relation, dvs. 1 variabel til 1 værdi.
Forestil dig nu at gemme flere værdier, der er af samme type. I stedet for at oprette flere variabler kan du bare oprette en variabel og gemme alle de samme typer værdier. Denne variabel kaldes en ARRAY.
=> Besøg her for at se VBA-træningsserien for alle
testteknikker i hvid boks med eksempler
I denne vejledning lærer du at vide, hvad der er et VBA-array, en-dimensionelle og to-dimensionelle arrays sammen med de forskellige typer arrays som Fixed og Dynamic. Vi vil også forstå forskellige matrixmetoder, der bruges i VBA.
Hvad du lærer:
VBA Array
Arrays er en særlig type variabel, der kan gemme flere værdier af samme datatype.
For eksempel, Hvis du har navnene på 100 ansatte, kan du i stedet for at oprette 100 variabler af datatypestrengen bare oprette en arrayvariabel af typestrengen og tildele 100 værdier til den samme arrayvariabel.
En dimensionel matrix
Et array, der har alle elementerne i en enkelt række eller i en enkelt kolonne, kaldes et endimensionelt array. At liste navnene på alle eleverne i klassen i en enkelt kolonne er et eksempel på et endimensionelt array. Det erklæres som vist nedenfor.
Dæmp matrixnavn (nedre til øvre bund) som datatype
Der er flere måder at erklære en matrix på. Nedenfor er et par eksempler.
Eksempel:
# 1) Dim MyArrayExample (0 til 3) som heltal
Opretter en matrix med placering 0,1,2,3, der accepterer heltalværdier.
# 2) Dim MyArray2 (3) Som streng
Standard er 0 til 3 og opretter en matrix med placering 0,1,2,3, der accepterer strengværdier.
# 3) Dim MyArray2 (13 til 15) Som dobbelt
Opretter en matrix, der starter fra 13, dvs. 13, 14 og 15, og accepterer dobbeltværdier. Vi har nævnt den nedre grænse som 13, så matrixen begynder at tildele værdier fra placering 13 i stedet for 0.
Lad os oprette en simpel kode og forstå alle de 3 måder, hvorpå array-erklæring kan findes.
Bemærk: At skrive VB-kode Åbn Microsoft Excel (understøttede versioner er Excel 2007, 2010, 2013, 2016, 2019). Naviger til Fanen Udvikler -> Visual Basic (Alternativt kan du bruge genvej Alt + F11). Klik på i VB-editoren Indsæt -> Modul og indsæt nedenstående kode.
Overvej nedenstående procedure, der viser de forskellige typer erklæringer.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String ‘creates array with index 0,1,2 firstQuarter(0) = 'Jan' firstQuarter(1) = 'Feb' firstQuarter(2) = 'Mar' MsgBox 'First Quarter in calendar ' & ' ' & firstQuarter(0) & ' ' & firstQuarter(1) & ' ' & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String ‘creates array with index 0,1,2 secondQuarter(0) = 'April' secondQuarter(1) = 'May' secondQuarter(2) = 'June' MsgBox 'Second Quarter in calendar ' & ' ' & secondQuarter(0) & ' ' & secondQuarter(1) & ' ' & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String ‘creates array with index 13,14,15 thirdQuarter(13) = 'July' thirdQuarter(14) = 'Aug' thirdQuarter(15) = 'Sep' MsgBox 'Third Quarter in calendar ' & ' ' & thirdQuarter(13) & ' ' & thirdQuarter(14) & ' ' & thirdQuarter(15) End Sub
Tryk på F5, eller tryk på køreknappen på værktøjslinjen for at udføre koden.
Regular Variable Vs Array Variable
Vi ved nu, hvordan et endimensionelt array fungerer. Så lad os tage et øjeblik at forstå, hvorfor arrays er så vigtige i programmeringssprog.
Antag, at du skal indtaste lønnen til 5 ansatte. For at opnå dette ved hjælp af en almindelig variabel skal du oprette 5 variabler.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') ' Declare variable for each student Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Read student marks from cell Emp1 = shet.Range('A' & 2).Value Emp2 = shet.Range('A' & 3).Value Emp3 = shet.Range('A' & 4).Value Emp4 = shet.Range('A' & 5).Value Emp5 = shet.Range('A' & 6).Value ' Print student marks Debug.Print 'Emp Name' Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Lad os nu oprette den samme kode ved hjælp af en Array-variabel.
Option Explicit Public Sub ArrayVarible() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets('Sheet1') Dim Employee(1 To 6) As String Dim i As Integer For i = 1 To 6 Employee(i) = shet.Range('A' & i).Value Debug.Print Employee(i) Next i End Sub
Her har vi lige brugt en matrixvariabel, der gemmer alle medarbejdernavne. Antag at du skal tilføje 100 flere medarbejdernavne, så skal du bare ændre matrixstørrelsen og ikke behøver at oprette en ny variabel.
Dette vil reducere antallet af linjer i koden og derved gøre det let forståeligt og læsbart.
To-dimensionel matrix
Et 2-dimensionelt array har 2 indekser - det første indeks repræsenterer rækkerne og det andet indeks repræsenterer kolonnen. Det har flere rækker og kolonner og er normalt repræsenteret i et tabelformat.
Erklæringen om et 2-dim array er som følger:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Som datatype.
Overvej et eksempel på lagring af karakterer for 2 studerende opnået i 3 fag. Så vi opretter et 2-dimensionelt array, der tager 2 rækker og 3 kolonner.
Vi starter arrayet fra række 1 til række 2 og kolonne 1 til kolonne 3.
Sub Twodim() Dim totalMarks(1 To 2, 1 To 3) As Integer totalMarks(1, 1) = 23 totalMarks(2, 1) = 34 totalMarks(1, 2) = 33 totalMarks(2, 2) = 55 totalMarks(1, 3) = 45 totalMarks(2, 3) = 44 Msgbox “Total Marks in Row 2 and column 2 is “ &totalMarks(2,2) Msgbox “Total Marks in Row 1 and column 3 is “ &totalMarks(1,3) End Sub
Tryk på F5 eller tryk på køreknappen på værktøjslinjen for at udføre koden.
Række 2 og kolonne 2
Række 1 og kolonne 3
Faste arrays
Faste arrays, også kaldet statiske arrays, har en fast nedre og øvre grænse, og denne størrelse kan ikke ændres på kørselstidspunktet. Matrixens størrelse specificeres under erklæringen inden for parenteserne. Alle ovenstående eksempler er faste arrays, da vi har nævnt størrelsen på det under erklæringen.
Faste arrays bruges normalt, når du er sikker på størrelsen på arrayet. For eksempel, antallet af dage i en uge kan du oprette en matrix med nedre grænse 0 og øvre grænse 6 og være sikker på at du aldrig vil ændre dens størrelse.
Dynamiske arrays
Dynamiske arrays giver os mulighed for at ændre størrelsen på arrayet i løbet af løbetiden. Disse er nyttige, når du ikke er sikker på størrelsen på arrayet. Antag at du ved college-optagelse måske ikke er sikker på, hvor mange studerende der faktisk får optagelse, så du kan ikke bestemme størrelsen på design- eller erklæringstidspunktet.
Erklæring om et dynamisk array svarer til et statisk array med tomme parenteser.
Dim medarbejder () som streng
REDIM
Når vi vil ændre den størrelse, vi har brug for REDIM , skal vi bemærke, at den nedre grænse ikke kan ændres, vi kan kun ændre den øvre grænse for arrayet.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ‘ Redim will help to change the array size during runtime dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled after ' & curdate & ' are “ & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) End Sub
Nu ved vi, at vi kan ændre størrelsen på arrayet i løbet af kørselstiden, og derfor kan vi bruge ReDim-sætningen, når vi har brug for at øge en matrixs ubound. Lad os prøve at øge matrixstørrelsen en gang til og tilføje et nyt elevnavn.
Sub RedimExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim dynArray(3) ‘ Redim will reinitialise the array and destroy the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Du ville have observeret, at resultatet ikke viste navnene på de studerende, der blev tilføjet før, det giver en nulværdi. Det skyldes, at Redim-sætningen opretter et nyt array med en ny størrelse og ødelægger de gamle værdier.
ReDim Preserve
Repræsentationserklæring hjælper os med at overvinde begrænsningen af ReDim ved at bevare de gamle værdier og derved øge arrayets størrelse.
Lad os omskrive ovenstående kode ved hjælp af ReDim Preserve.
Sub preserveExample() Dim dynArray() As String Dim curdate As Date curdate = Now Dim size As Integer ReDim dynArray(2) dynArray(0) = 'John' dynArray(1) = 'Tom' dynArray(2) = 'Tonny' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) ReDim preserve dynArray(3) ‘ Redim preserve will retain the old values dynArray(3) = 'John' MsgBox 'Students Enrolled untill ' & curdate & ' are ' & dynArray(0) & ', ' & dynArray(1) & ', ' & dynArray(2) & ' , ' & dynArray(3) End Sub
Da vi har brugt bevare nøgleordet, går de tidligere indtastede værdier ikke tabt, og den nye værdi tilføjes med succes.
Variant Array
Indtil nu har vi set et array, der accepterer den samme type værdier. Lad os nu erklære arrayet som en variant og gemme de forskellige typer data som String, Date, Long, Integer i et enkelt array.
Eksempel:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = 'Vikram Vikrant' arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = '06-09-1972' MsgBox 'Details of person ' & arrayData(0) & ' is ' & ' Phone No ' & arrayData(1) & ' ,Id ' & arrayData(2) & ' ,DOB ' & arrayData(3) End Sub
VBA Array Methods
Der er flere metoder i VBA-arrays, der hjælper os med at udføre forskellige funktioner, som nævnt nedenfor.
Sl. Ingen | Navn | Syntaks | Beskrivelse |
---|---|---|---|
7 | Tilslutte | Deltag (sourcearray, (afgrænser)) | Deltager i flere understreng i en matrix og returnerer en strengværdi. |
en | Array | Array (svigagtig) | Konverterer en almindelig variant variabel til en matrix. |
to | Slette | Slet arrayname | Bruges til at genindføre det faste størrelses array og frigør hukommelsen til Dynamic array. |
3 | IsArray | IsArray (variabelnavn) | Bestemmer, om en variabel er en matrix. |
4 | Lbundet | LBound (ArrayName, (Dimension)) | Returnerer det laveste abonnement af en matrix. |
5 | Ubundet | UBound (ArrayName, (Dimension)) | Returnerer det højeste abonnement af en matrix. |
6 | Dele | Split (udtryk, (afgrænser, (grænse, (sammenlign)))) | Det opdeler en streng i flere understrenge og returnerer et nulbaseret array. |
8 | Filter | Filter (sourcearray, match, (inkluderer, (sammenlign))) | Filter giver os mulighed for at søge a specificeret match fra en matrix. |
Lad os diskutere hver af dem detaljeret med et eksempel.
# 1) Array
Lad os erklære en regelmæssig variantvariabel og bruge den som en matrix. Når du vil ændre en regelmæssig variantvariabel til en matrix, skal vi bruge en ARRAY fungerer som vist i nedenstående eksempel.
Array-funktioner accepterer et argument, der indeholder komma-adskilte værdier. Disse værdier er tildelt som et element i arrayet.
Sub variantArray() Dim varData As Variant varData = Array('Mon Bel', '+61 112334123', 567, '06-09-1972') MsgBox 'Details of person ' & varData(0) & ' is ' & ' Phone No ' & varData(1) & ' ,Id ' & varData(2) & ' ,DOB ' & varData(3) End Sub
Du skal identificere en matrixvariabel ved hjælp af et indeks, og derfor hentes værdierne i ovenstående eksempel som varData (0) varData (2) varData (3).
# 2) Slet
Denne funktion sletter alle de indtastede værdier for et array med fast størrelse og frigør hukommelsespladsen til et dynamisk array.
Syntaks: Slet arraynavn
Sletning har forskellig opførsel for forskellige datatyper som angivet nedenfor.
- For et fast tal: Alle værdier nulstilles til nul.
- For en datatype med fast streng: Alle værdier nulstilles til nul længde.
- For et dynamisk array: Frigør den hukommelse, der bruges af arrayet.
Eksempel:
Sub eraseExample() Dim NumArray(3) As Integer Dim decArray(2) As Double Dim strArray(2) As String NumArray(0) = 12345 decArray(1) = 34.5 strArray(1) = 'Erase Function' Dim DynaArray() ReDim DynaArray(3) MsgBox ' Values before Erase ' & (NumArray(0)) & ',' & (decArray(1)) & ' , ' & (strArray(1)) Erase NumArray Erase decArray Erase strArray Erase DynaArray ' Free the memory ' All values are erased. MsgBox ' Values after Erase ' & NumArray(0) & ',' & decArray(1) & ' , ' & strArray(1) End Sub
Resultat før du bruger Slet-funktionen
java kodning interview spørgsmål og svar
Resultat efter brug af Slet
# 3) IsArray
Denne funktion bruges til at bestemme, om den givne inputvariabel er en matrix eller ej. Det returnerer sandt, hvis den indtastede variabel er sand, ellers returnerer den falsk.
Syntaks: IsArray (variabelnavn)
Eksempel:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array('Jan', 'Feb', 'Mar') arr2 = '12345' MsgBox ('Is arr1 an Array : ' & IsArray(arr1)) MsgBox ('Is arr2 an Array : ' & IsArray(arr2)) End
Resultatet fra den første Msgbox
Resultatet fra den anden msgbox
# 4) Lbundet
Det returnerer det laveste abonnement på det array, der er angivet som argumentet for funktionen Lbound.
Syntaks: LBound (ArrayName, (Dimension))
ArrayName er arrayets navn.
Dimension er den valgfri heltalsværdi. Hvis arrayet har flere dimensioner, kan du angive, til hvilken dimension du vil bestemme Lbound.
Eksempel:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Returns 1. Result2 = LBound(ArrayValue, 3) ' Returns 10. Result3 = LBound(Arraywithoutlbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 5) Ubundet
Det returnerer det øverste abonnement på det array, der er angivet som et argument i funktionen Ubound.
Syntaks: UBound (ArrayName, (Dimension))
ArrayName er arrayets navn.
Dimension er den valgfri heltalsværdi. Hvis arrayet har flere dimensioner, kan du angive, hvilken dimension du vil bestemme den ubundne.
Eksempel:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Declare array variables. Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox 'Lowest subscript in first array ' & Result1 & ' lowest subscript in 3rd array ' & Result2 & ' Lowest subscript in Arraywithoutlbound ' & Result3 End Sub
# 6) Opdel
Det returnerer en matrix med et antal understrenge afledt af den givne hele streng.
Syntaks: Split (udtryk, (afgrænser, (grænse, (sammenlign))))
- Udtryk: Dette er hele strengen, der vil blive brugt til at producere understrenge.
- Afgrænser: Ved hjælp af den specificerede afgrænser genereres understrenge. Hvis dette ikke er nævnt, betragtes plads som afgrænser.
- Begrænse: Antal understrenge, der skal returneres.
- Sammenligne: Når substratet er produceret, kan du bruge forskellige sammenligningsindstillinger til at teste resultatet.
Eksempel: I nedenstående eksempel bruger vi afgrænser som - og begræns som 3.
Derfor vil split-funktionen adskille hele strengen i substring baseret på afgrænseren. Men vi har også nævnt grænsen som 3, så understrings ikke dannes efter grænsen 3. Dermed springes den sidste afgrænser over.
Sub splitExample() Dim MyString As String Dim Result() As String Dim DisplayText As String MyString = 'This is the example for-VBA-Split-Function' Result = Split(MyString, '-',3) MsgBox Result(0) & vbNewLine & Result(1) & vbNewLine & Result(2) & vbNewLine & Result(3) End Sub
# 7) Deltag
Dette er bare det modsatte af split, Join opretter en streng ved at kombinere flere understreng.
Syntaks: Deltag (sourcearray, (afgrænser))
Sourcearray: Endimensionelt matrix af strenge, som du vil forbinde til en.
Afgrænser: Specificeret afgrænser tilføjes efter hver streng, mens du deltager.
Eksempel:
Sub joinExample() Dim Result As String Dim dirarray(0 To 2) As String dirarray(0) = 'D:' dirarray(1) = 'SoftwareTestingHelp' dirarray(2) = 'Arrays' Result = Join(dirarray, '') MsgBox 'Date after joining ' & Result End Sub
Alle de 3 værdier er samlet og er placeret mellem hvert ord, som vi har nævnt som afgrænser.
# 8) Filter
Filtret giver os mulighed for at søge efter et bestemt match fra en matrix. Baseret på filterkriterierne returneres delmængden af en streng array.
Syntaks: Filter (sourcearray, match, (inkluderer, (sammenlign)))
Eksempel:
Sub filterExample() Dim Mystring As Variant Mystring = Array('Software Testing', 'Testing help', 'Software help') filterString = Filter(Mystring, 'help') MsgBox 'Found ' & UBound(Mystring) - LBound(Mystring) + 1 & ' words matching the criteria ' End Sub
Dette eksempel søger efter ordet 'hjælp' i al matrixstreng ved hjælp af filterfunktionen.
Ofte stillede spørgsmål
Q # 1) Hvordan får man længden på en matrix i VBA?
Svar: For at få længden på en matrix bruger vi funktionen Ubound. Denne funktion giver os et øvre abonnement på et specificeret array.
Q # 2) Hvordan erklæres en matrix i VBA?
Svar: Endimensionelt array erklæres som vist nedenfor.
Dæmp matrixnavn (nedre til øvre bund) som datatype
Eksempel: Dim Myarray (0 til 2) som heltal
Et todimensionelt array erklæres som vist nedenfor.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Som datatype.
Eksempel: Dæmpningsmærker (1 til 3, 0 til 2) som heltal
Spørgsmål nr. 3) Hvordan konverteres rækkevidde til matrix?
Svar: Vi kan bruge transponeringsfunktionen til at konvertere området til et array. Denne kode vil skabe Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
Q # 4) Hvad er en arrayvariant i VBA?
Svar: Et variantarray accepterer alle slags datatyper til dets indeks, dvs. du kan gemme forskellige typer værdier i et enkelt array.
Eksempel:
Dim arrayData (3) Som variant
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
Spørgsmål nr. 5) Hvad er en baseopgørelse om option?
Svar: Dette bruges til at erklære det nedre abonnement på en matrix og bruges ved starten af et modul. Som standard er det nederste abonnement 0, hvis du erklærer Option Base 1 på modulniveau, så for alle arrays er standard lavere abonnement 1.
Konklusion
I denne vejledning har vi lært, hvordan Arrays bruges i VBA, og vi har set, hvordan Arrays er forskellige fra en almindelig variabel. Vi udforskede endimensionelle og todimensionale arrays med eksempler. Vi diskuterede også faste og dynamiske arrays.
Måderne til at ændre størrelsen på arrayet under runtime og også bevare værdierne ved hjælp af redim preserve blev diskuteret med eksempler. Endelig lærte vi Array-metoder, der hjælper os med at udføre flere operationer.
=> Tjek ALLE VBA-vejledninger her
Anbefalet læsning
- Excel VBA-vejledning - Introduktion til VBA i Excel
- VBA-datatyper - Numeriske og ikke-numeriske datatyper i VBA
- VBA-variabler og option eksplicit i VBA
- Vend en matrix i Java - 3 metoder med eksempler
- Java Array Length Tutorial med kodeeksempler
- Jagged Array In Java - Vejledning med eksempler
- Array-datatyper - int Array, Double array, Array of Strings Etc.
- String Array C ++: Implementering & repræsentation med eksempler