excel vba array array methods with examples
Denna handledning kommer att förklara VBA Array, olika arraytyper, variant array och array metoder med hjälp av programmeringsexempel:
En vanlig VBA-variabel är en platshållare som lagrar värdet på en enskild data. Den har en 1 till 1 relation, dvs. en variabel för 1 värde.
Tänk dig att lagra flera värden av samma typ. Istället för att skapa flera variabler kan du bara skapa en variabel och lagra alla samma värden. Denna variabel kallas en ARRAY.
=> Besök här för att se VBA-träningsserien för alla
fri programvara för att åtgärda registerfel
I den här handledningen lär du dig vad som är en VBA-array, endimensionella och tvådimensionella matriser tillsammans med de olika typerna av matriser som Fixed och Dynamic. Vi kommer också att förstå olika matrismetoder som används i VBA.
Vad du kommer att lära dig:
VBA Array
Arrays är en speciell typ av variabel som kan lagra flera värden av samma datatyp.
Till exempel, Om du har namnen på 100 anställda, istället för att skapa 100 variabler av datatypsträng, kan du bara skapa en arrayvariabel av typsträngen och tilldela 100 värden till samma arrayvariabel.
En dimensionell matris
En matris som har alla element i en enda rad eller i en enda kolumn kallas en endimensionell matris. Att lista namnen på alla elever i klassen i en enda kolumn är ett exempel på en endimensionell matris. Det förklaras som visas nedan.
Dim matrisnamn (nedre till övre gräns) som datatyp
Det finns flera sätt att deklarera en matris. Nedan följer några exempel.
Exempel:
# 1) Dim MyArrayExample (0 till 3) som heltal
Skapar en matris med plats 0,1,2,3 som accepterar heltalsvärden.
# 2) Dim MyArray2 (3) Som sträng
Standardvärden är 0 till 3 och skapar en matris med plats 0,1,2,3 som accepterar strängvärden.
# 3) Dim MyArray2 (13 till 15) Som dubbel
Skapar en matris som börjar från 13, dvs. 13, 14 och 15, och accepterar dubbla värden. Vi har nämnt den nedre gränsen som 13, så matrisen börjar allokera värden från plats 13 snarare än 0.
Låt oss skapa en enkel kod och förstå alla de tre sätten för arraydeklaration.
Notera: Att skriva VB-kod Öppna Microsoft Excel (versioner som stöds är Excel 2007, 2010, 2013, 2016, 2019). Navigera till Fliken Developer -> Visual Basic (Alternativt kan du använda genvägen Alt + F11). Klicka på i VB-redigeraren Infoga -> Modul och klistra in koden nedan.
Tänk på nedanstående procedur som visar olika typer av deklarationer.
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
Tryck på F5 eller tryck på kör-knappen i verktygsfältet för att köra koden.
Regular Variable Vs Array Variable
Vi vet nu hur en endimensionell matris fungerar. Så låt oss ta en stund för att förstå varför matriser är så viktiga i programmeringsspråk.
Antag att du måste ange lönen för 5 anställda. För att uppnå detta med en vanlig variabel måste du skapa 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
Låt oss nu bygga samma kod med 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
Här har vi just använt en arrayvariabel som lagrar alla anställdas namn. Antag att du behöver lägga till 100 anställdamn, du behöver bara ändra matrisstorleken och inte behöva skapa en ny variabel.
Detta kommer att minska antalet rader i koden och därmed göra det lätt att förstå och läsa.
Tvådimensionell matris
En tvådimensionell matris har två index - det första indexet representerar raderna och det andra indexet representerar kolumnen. Den har flera rader och kolumner och representeras vanligtvis i ett tabellformat.
Deklarationen för en 2-dim array är som följer:
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Som datatyp.
Tänk på ett exempel på att lagra betyg för 2 studenter som erhållits i 3 ämnen. Så vi skapar en 2-dimensionell matris som tar 2 rader och 3 kolumner.
Vi startar matrisen från rad 1 till rad 2 och kolumn 1 till kolumn 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
Tryck på F5 eller tryck på kör-knappen i verktygsfältet för att köra koden.
Rad 2 och kolumn 2
Rad 1 och kolumn 3
Fasta matriser
Fasta matriser som också kallas statiska matriser har en fast nedre och övre gräns och denna storlek kan inte ändras vid körningstid. Storleken på matrisen anges under deklarationen inom parentes. Alla ovanstående exempel är fasta matriser eftersom vi har nämnt storleken på den under deklarationen.
Fasta matriser används vanligtvis när du är säker på storleken på matrisen. Till exempel, antalet dagar i veckan kan du skapa en matris med nedre gräns 0 och övre gräns 6 och vara säker på att du aldrig kommer att ändra storleken.
Dynamiska matriser
Med dynamiska matriser kan vi ändra storlek på matrisen under körtiden. Dessa är användbara när du inte är säker på storleken på matrisen. Antag att du vid antagning till college kanske inte är säker på hur många studenter som faktiskt kommer att få antagning, så du kan inte bestämma storleken vid tidpunkten för design eller förklaring.
Förklaring om en dynamisk matris liknar en statisk matris med tomma parenteser.
Dim anställd () som sträng
REDIM
När vi vill ändra den storlek vi behöver använda REDIM måste vi notera att den undre gränsen inte kan ändras, vi kan bara ändra den övre gränsen för matrisen.
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 vet vi att vi kan ändra storleken på matrisen under körning, därför kan vi använda ReDim-uttalandet när vi behöver öka en matris. Låt oss försöka öka gruppens storlek en gång till och lägga till ett nytt studentnamn.
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 skulle ha observerat att resultatet inte visade namnen på de studenter som lagts till tidigare, det ger ett nollvärde. Det beror på att Redim-uttalandet skapar en ny matris med en ny storlek och förstör de gamla värdena.
ReDim Preserve
Representative statement hjälper oss att övervinna begränsningen av ReDim genom att bevara de gamla värdena och därigenom öka storleken på arrayen.
Låt oss skriva om ovanstående kod med 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
Eftersom vi har använt bevara nyckelordet tappas inte de tidigare angivna värdena och det nya värdet läggs till framgångsrikt.
Variant Array
Hittills har vi sett en array som accepterar samma typ av värden. Låt oss nu förklara matrisen som en variant och lagra de olika typerna av data som String, Date, Long, Integer i en enda array.
Exempel:
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
Det finns flera metoder i VBA-arrayer som hjälper oss att utföra olika funktioner, som nämnts nedan.
Sl. Nej | namn | Syntax | Beskrivning |
---|---|---|---|
7 | Ansluta sig | Gå med (sourcearray, (avgränsare)) | Sammanfogar flera delsträngar i en matris och returnerar ett strängvärde. |
1 | Array | Array (bedrägligt) | Konverterar en vanlig variant variabel till en matris. |
två | Radera | Radera arraynamn | Används för att återintroducera arrayen med fast storlek och frigör minnet för Dynamic array. |
3 | IsArray | IsArray (variabelnamn) | Avgör om en variabel är en matris. |
4 | Lbound | LBound (ArrayName, (Dimension)) | Returnerar det lägsta prenumerationen av en matris. |
5 | Obundet | UBound (ArrayName, (Dimension)) | Returnerar det högsta prenumerationen av en matris. |
6 | Dela | Dela (uttryck, (avgränsare, (gräns, (jämför)))) | Den delar en sträng i flera understrängar och returnerar en nollbaserad matris. |
8 | Filtrera | Filter (sourcearray, match, (include, (jämför))) | Filter tillåter oss att söka a angiven matchning från en matris. |
Låt oss diskutera var och en av dem i detalj med ett exempel.
# 1) Array
Låt oss förklara en vanlig variabel och använda den som en matris. När du vill ändra en vanlig variantvariabel till en matris måste vi använda en ARRAY som visas i exemplet nedan.
Arrayfunktioner accepterar ett argument som innehåller kommaseparerade värden. Dessa värden tilldelas som ett element i matrisen.
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 måste identifiera en matrisvariabel med hjälp av ett index, så i ovanstående exempel hämtas värdena som varData (0) varData (2) varData (3).
# 2) Radera
Den här funktionen raderar alla inmatade värden för en array med fast storlek och frigör minnesutrymmet för en dynamisk array.
Syntax: Radera arraynamn
Radera har olika beteende för olika datatyper enligt nedan.
- För en fast siffra: Alla värden återställs till noll.
- För en datatyp med fast sträng: Alla värden återställs till noll längd.
- För en dynamisk matris: Frigör minnet som används av matrisen.
Exempel:
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 innan du använder Radera-funktionen
Resultat efter användning Radera
# 3) IsArray
Denna funktion används för att avgöra om den givna inmatningsvariabeln är en matris eller inte. Det returnerar true om den angivna variabeln är true, annars returnerar den false.
Syntax: IsArray (variabelnamn)
Exempel:
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 från den första Msgbox
Resultatet från den andra msgboxen
# 4) Lbound
Det returnerar det lägsta prenumerationen på matrisen som anges som argument för funktionen Lbound.
Syntax: LBound (ArrayName, (Dimension))
ArrayName är arrayens namn.
Dimension är det valfria heltalsvärdet. Om matrisen har flera dimensioner kan du ange till vilken dimension du vill bestämma Lbound.
Exempel:
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) Obundet
Det returnerar det övre prenumerationen på matrisen som anges som ett argument i funktionen Ubound.
Syntax: UBound (ArrayName, (Dimension))
ArrayName är arrayens namn.
Dimension är det valfria heltalsvärdet. Om matrisen har flera dimensioner kan du ange vilken dimension du vill bestämma den obundna.
Exempel:
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) Dela
Den returnerar en matris med ett antal strängar härledda från den givna hela strängen.
Syntax: Dela (uttryck, (avgränsare, (gräns, (jämför))))
- Uttryck: Detta är hela strängen som kommer att användas för att producera underlag.
- Avgränsare: Med den angivna avgränsaren genereras understrängar. Om detta inte nämns betraktas utrymme som avgränsare.
- Begränsa: Antal underlag som ska returneras.
- Jämföra: När substratet har producerats kan du använda olika jämförelsealternativ för att testa resultatet.
Exempel: I exemplet nedan använder vi avgränsare som - och begränsar som 3.
Därför kommer split-funktionen att separera hela strängen i substring baserat på avgränsaren. Men vi har också nämnt gränsen som 3 så underlag kommer inte att bildas efter gränsen 3. Således kommer den sista avgränsaren att hoppas över.
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) Gå med
Detta är bara det motsatta av uppdelningen, Join kommer att skapa en sträng genom att kombinera flera underlag.
Syntax: Gå med (sourcearray, (avgränsare))
Sourcearray: En-dimensionell rad strängar som du vill gå med i en.
Avgränsare: Specificerad avgränsare läggs till efter varje sträng när du går med.
Exempel:
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
Alla de 3 värdena förenas och placeras mellan varje ord, som vi har nämnt som avgränsare.
# 8) Filter
Filtret låter oss söka efter en angiven matchning från en matris. Baserat på filterkriterierna returneras delmängden av en strängmatris.
Syntax: Filter (sourcearray, match, (include, (jämför)))
Exempel:
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
Detta exempel kommer att söka efter ordet 'help' i hela arraysträngen med hjälp av filterfunktionen.
Vanliga frågor
F # 1) Hur får man längden på en array i VBA?
Svar: För att få längden på en matris använder vi funktionen Ubound. Denna funktion ger oss ett övre prenumeration på en angiven matris.
F # 2) Hur man deklarerar en array i VBA?
Svar: Endimensionell matris deklareras enligt nedan.
Dim matrisnamn (nedre till övre gräns) som datatyp
Exempel: Dim Myarray (0 till 2) som heltal
hur man öppnar torrentfiler på mac
En tvådimensionell matris deklareras som visas nedan.
Dim ArrayName (FirstIndex To LastIndex, FirstIndex To LastIndex) Som datatyp.
Exempel: Dim markeringar (1 till 3, 0 till 2) som heltal
F # 3) Hur konverterar jag Range till Array?
Svar: Vi kan använda transponeringsfunktionen för att konvertera intervallet till en matris. Denna kod skapar Mys (10)
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range('A1:A10')) End Sub
F # 4) Vad är en arrayvariant i VBA?
Svar: En variantmatris accepterar alla typer av datatyper för indexet, dvs. du kan lagra olika typer av värden i en enda matris.
Exempel:
Dim arrayData (3) Som variant
arrayData (0) = 'Vikas Vipal'
arrayData (1) = 411234567890 #
F # 5) Vad är ett alternativbasuttalande?
Svar: Detta används för att deklarera det nedre underskriptet för en matris och används i början av en modul. Som standard är det nedre prenumerationen 0 om du förklarar Option Base 1 på modulnivå, då för alla arrays är standard nedre prenumerationen 1.
Slutsats
I denna handledning har vi lärt oss hur Arrays används i VBA och vi såg hur Arrays skiljer sig från en vanlig variabel. Vi undersökte endimensionella och tvådimensionella matriser med exempel. Vi diskuterade också fasta och dynamiska matriser.
Sätten att ändra storlek på arrayen under körning och även bevara värdena med redim preserve diskuterades med exempel. Slutligen lärde vi oss Array-metoder som hjälper oss att utföra flera operationer.
=> Kontrollera ALLA VBA-handledning här
Rekommenderad läsning
- Excel VBA-handledning - Introduktion till VBA i Excel
- VBA-datatyper - Numeriska och icke-numeriska datatyper i VBA
- VBA-variabler och alternativ som är explicita i VBA
- Omvänd en matris i Java - 3 metoder med exempel
- Java Array Length Tutorial With Code Exempel
- Jagged Array In Java - Handledning med exempel
- Array Data Typer - int Array, Double array, Array of Strings Etc.
- String Array C ++: Implementering & representation med exempel