In diesem Tutorial werden VBA Array, verschiedene Array-Typen, Variant-Array und Array-Methoden mit Hilfe von Programmierbeispielen erklärt:
Eine reguläre VBA-Variable ist ein Platzhalter, der den Wert eines einzelnen Datensatzes speichert. Sie steht in einer 1:1-Beziehung, d.h. 1 Variable für 1 Wert.
Stellen Sie sich nun vor, dass Sie mehrere Werte desselben Typs speichern. Anstatt mehrere Variablen zu erstellen, können Sie nur eine Variable erstellen und alle Werte desselben Typs speichern. Diese Variable wird ARRAY genannt.
In diesem Tutorial erfahren Sie, was ein VBA-Array, eindimensionale und zweidimensionale Arrays sowie die verschiedenen Array-Typen wie Fixed und Dynamic sind und lernen verschiedene Array-Methoden kennen, die in VBA verwendet werden.
VBA-Array
Arrays sind eine besondere Art von Variablen, die mehrere Werte desselben Datentyps speichern können.
Zum Beispiel, Wenn Sie die Namen von 100 Angestellten haben, dann können Sie, anstatt 100 Variablen vom Datentyp string zu erstellen, einfach eine Array-Variable vom Typ string erstellen und 100 Werte derselben Array-Variable zuweisen.
Eindimensionales Array
Ein Array, das alle Elemente in einer einzigen Zeile oder Spalte enthält, wird ein eindimensionales Array genannt. Ein Beispiel für ein eindimensionales Array ist die Auflistung der Namen aller Schüler der Klasse in einer einzigen Spalte. Es wird wie unten gezeigt deklariert.
Dim arrayname(lowerbound To UpperBound) As DataType
Es gibt mehrere Möglichkeiten, ein Array zu deklarieren. Nachfolgend sind einige Beispiele aufgeführt.
Beispiel:
#1) Dim MyArrayExample(0 To 3) As Integer
Erzeugt ein Array mit der Position 0,1,2,3, das Integer-Werte aufnehmen kann.
#2) Dim MyArray2(3) As String
Der Standardwert ist 0 bis 3 und erstellt ein Array mit der Position 0,1,2,3, das String-Werte akzeptiert.
#3) Dim MyArray2(13 bis 15) As Double
Erzeugt ein Array, das mit 13 beginnt, d.h. 13, 14 und 15, und akzeptiert Double-Werte. Wir haben die untere Grenze als 13 angegeben, so dass das Array mit der Zuweisung von Werten ab Position 13 und nicht 0 beginnt.
Lassen Sie uns einen einfachen Code erstellen und alle 3 Arten der Array-Deklaration verstehen.
Anmerkung: So schreiben Sie VB-Code Öffnen Sie Microsoft Excel (unterstützte Versionen sind Excel 2007, 2010, 2013, 2016, 2019). Navigieren Sie zu Registerkarte Entwickler -> Visual Basic (Alternativ können Sie auch die Tastenkombination Alt+F11 verwenden). Im VB-Editor klicken Sie auf Einfügen -> Modul und fügen Sie den folgenden Code ein.
Das folgende Verfahren zeigt die verschiedenen Arten von Erklärungen.
Private Sub arrayExample1() Dim firstQuarter(0 To 2) As String 'erstellt Array mit Index 0,1,2 firstQuarter(0) = "Jan" firstQuarter(1) = "Feb" firstQuarter(2) = "Mar" MsgBox "Erstes Quartal im Kalender " & " & firstQuarter(0) & " & firstQuarter(1) & " & " & firstQuarter(2) End Sub Private Sub arrayExample2() Dim secondQuarter(2) As String 'erstellt Array mit Index 0,1,2secondQuarter(0) = "April" secondQuarter(1) = "Mai" secondQuarter(2) = "Juni" MsgBox "Zweites Quartal im Kalender " & " " & secondQuarter(0) & " & secondQuarter(1) & " & secondQuarter(2) End Sub Private Sub arrayExample3() Dim thirdQuarter(13 To 15) As String 'erstellt Array mit Index 13,14,15 thirdQuarter(13) = "Juli" thirdQuarter(14) = "Aug" thirdQuarter(15) = "Sep"MsgBox "Drittes Quartal im Kalender " & " " & drittesQuartal(13) & " " & drittesQuartal(14) & " " & drittesQuartal(15) End Sub
Drücken Sie F5 oder die Schaltfläche Ausführen in der Symbolleiste, um den Code auszuführen.
Reguläre Variable vs. Array-Variable
Jetzt wissen wir, wie ein eindimensionales Array funktioniert. Nehmen wir uns also einen Moment Zeit, um zu verstehen, warum Arrays in Programmiersprachen so wichtig sind.
Angenommen, Sie müssen das Gehalt von 5 Mitarbeitern eingeben. Um dies mit einer regulären Variablen zu erreichen, müssen Sie 5 Variablen erstellen.
Public Sub RegularVariable() Dim shet As Worksheet Set shet = ThisWorkbook.Worksheets("Sheet1") ' Variable für jeden Schüler deklarieren Dim Emp1 As String Dim Emp2 As String Dim Emp3 As String Dim Emp4 As String Dim Emp5 As String ' Schülernoten aus Zelle lesen 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 ' Studentennoten drucken Debug.Print "Emp Name" Debug.Print Emp1 Debug.Print Emp2 Debug.Print Emp3 Debug.Print Emp4 Debug.Print Emp5 End Sub
Nun wollen wir denselben Code mit einer Array-Variablen erstellen.
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
Hier haben wir nur eine Array-Variable verwendet, die alle Mitarbeiternamen speichert. Angenommen, Sie müssen 100 weitere Mitarbeiternamen hinzufügen, dann brauchen Sie nur die Array-Größe zu ändern und müssen keine neue Variable erstellen.
Dadurch wird die Anzahl der Zeilen im Code reduziert und er wird dadurch leicht verständlich und lesbar.
Zweidimensionales Array
Ein 2-dimensionales Array hat 2 Indizes - der erste Index steht für die Zeilen und der zweite Index für die Spalten. Es hat mehrere Zeilen und Spalten und wird normalerweise in einem Tabellenformat dargestellt.
Die Deklaration eines 2-Dim-Arrays lautet wie folgt:
Dim ArrayName(FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Um die Noten von 2 Schülern in 3 Fächern zu speichern, erstellen wir ein 2-dimensionales Array, das 2 Zeilen und 3 Spalten enthält.
Wir beginnen das Feld von Zeile 1 bis Zeile 2 und Spalte 1 bis Spalte 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
Drücken Sie F5 oder die Schaltfläche Ausführen in der Symbolleiste, um den Code auszuführen.
Zeile 2 und Spalte 2
Zeile 1 und Spalte 3
Feste Arrays
Feste Arrays, auch statische Arrays genannt, haben eine feste untere und obere Grenze und diese Größe kann zur Laufzeit nicht geändert werden. Die Größe des Arrays wird während der Deklaration innerhalb der Klammern angegeben. Alle oben genannten Beispiele sind feste Arrays, da wir die Größe während der Deklaration angegeben haben.
Feste Arrays werden in der Regel verwendet, wenn Sie sich über die Größe des Arrays sicher sind. Zum Beispiel, die Anzahl der Tage in einer Woche, können Sie ein Array mit der unteren Grenze 0 und der oberen Grenze 6 erstellen und sicher sein, dass Sie seine Größe nie ändern werden.
Dynamische Arrays
Dynamische Arrays ermöglichen es uns, die Größe des Arrays während der Laufzeit zu ändern. Sie sind nützlich, wenn Sie sich über die Größe des Arrays nicht sicher sind. Nehmen wir an, dass Sie bei der Hochschulzulassung nicht sicher sind, wie viele Studenten tatsächlich zugelassen werden, so dass Sie die Größe nicht zur Entwurfs- oder Deklarationszeit bestimmen können.
Die Deklaration eines dynamischen Arrays ist ähnlich wie die eines statischen Arrays mit leeren Klammern.
Dim Employee() As String
REDIM
Wenn wir die Größe ändern wollen, müssen wir REDIM ist zu beachten, dass die untere Grenze nicht geändert werden kann, sondern nur die obere Grenze des Feldes.
Sub dynamicArray() Dim dynArray() As String Dim curdate As Date curdate = Now ReDim dynArray(2) ' Redim hilft, die Array-Größe während der Laufzeit zu ändern dynArray(0) = "John" dynArray(1) = "Tom" dynArray(2) = "Tonny" MsgBox "Schüler, die nach " & curdate & " eingeschrieben sind " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) End Sub
Jetzt wissen wir, dass wir die Größe des Arrays während der Laufzeit ändern können, daher können wir die ReDim-Anweisung immer dann verwenden, wenn wir die Größe eines Arrays erhöhen müssen. Versuchen wir, die Größe des Arrays ein weiteres Mal zu erhöhen und einen neuen Schülernamen hinzuzufügen.
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 "Studenten, die bis " & curdate & " eingeschrieben sind " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) ReDim dynArray(3) ' Redim wird das Array neu initialisieren und die alten Werte zerstörendynArray(3) = "John" MsgBox "Studenten eingeschrieben bis " & curdate & " sind " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) & " , " & dynArray(3) End Sub
Sie werden bemerkt haben, dass das Ergebnis nicht die Namen der zuvor hinzugefügten Schüler anzeigt, sondern einen Nullwert, weil die Redim-Anweisung ein neues Array mit einer neuen Größe erstellt und die alten Werte zerstört.
ReDim-Konserve
Die Represerve-Anweisung hilft uns, die Beschränkung von ReDim zu überwinden, indem sie die alten Werte beibehält und dadurch die Größe des Arrays erhöht.
Lassen Sie uns den obigen Code mit ReDim Preserve neu schreiben.
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 "Studenten eingeschrieben bis " & curdate & " sind " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) ReDim preserve dynArray(3) ' Redim preserve behält die alten Werte beidynArray(3) = "John" MsgBox "Studenten eingeschrieben bis " & curdate & " sind " & dynArray(0) & ", " & dynArray(1) & ", " & dynArray(2) & " , " & dynArray(3) End Sub
Da wir das Schlüsselwort preserve verwendet haben, gehen die zuvor eingegebenen Werte nicht verloren und der neue Wert wird erfolgreich hinzugefügt.
Variante Array
Bis jetzt haben wir ein Array gesehen, das den gleichen Typ von Werten akzeptiert. Jetzt wollen wir das Array als Variante deklarieren und die verschiedenen Datentypen wie String, Date, Long, Integer in einem einzigen Array speichern.
Beispiel:
Sub arrayVariant() Dim arrayData(3) As Variant arrayData(0) = "Vikram Vikrant" arrayData(1) = 411234567890# arrayData(2) = 38 arrayData(3) = "06-09-1972" MsgBox "Details der Person " & arrayData(0) & " is " & " Phone No " & arrayData(1) & " ,Id " & arrayData(2) & " ,DOB " & arrayData(3) End Sub
VBA-Array-Methoden
Es gibt mehrere Methoden in VBA Arrays, die uns helfen, verschiedene Funktionen auszuführen, wie unten erwähnt.
Nr. | Name | Syntax | Beschreibung |
---|---|---|---|
1 | Array | Array(arglist) | Konvertiert eine reguläre Variante Variable in ein Array. |
2 | löschen | Arrayname löschen | Wird zur Reintialisierung des Arrays mit fester Größe verwendet und gibt den Speicher für Dynamic Array frei. |
3 | IsArray | IsArray (Variablenname) | Bestimmt, ob eine Variable ein Array ist. |
4 | Lgebunden | LBound( ArrayName, [Dimension] ) | Gibt den niedrigsten tiefgestellten Wert zurück eines Arrays. |
5 | Ubound | UBound( ArrayName, [Dimension] ) | Gibt den höchsten tiefgestellten Wert zurück eines Arrays. |
6 | Teilen | Split(Ausdruck, [ Begrenzungszeichen, [ Grenze, [ Vergleich]]]) | Es unterteilt eine Zeichenkette in mehrere Teilzeichenfolgen und gibt ein nullbasiertes Array zurück. |
7 | Beitreten | Join(sourcearray, [ Begrenzungszeichen ]) | Verbindet mehrere Teilzeichenfolgen in einem Array und gibt einen String-Wert zurück. |
8 | Filter | Filter(sourcearray, match, [ include, [ compare ]]) | Filter ermöglicht uns die Suche nach angegebenen Treffer aus einem Array. |
Lassen Sie uns jeden dieser Punkte anhand eines Beispiels im Detail besprechen.
#1) Array
Wir deklarieren eine reguläre Variantenvariable und verwenden sie als Array. Wenn Sie eine reguläre Variantenvariable in ein Array umwandeln wollen, müssen wir eine ARRAY Funktion wie im folgenden Beispiel gezeigt.
Array-Funktionen akzeptieren ein Argument, das durch Kommata getrennte Werte enthält. Diese Werte werden als Element des Arrays zugewiesen.
Sub variantArray() Dim varData As Variant varData = Array("Mon Bel", "+61 112334123", 567, "06-09-1972") MsgBox "Angaben zur Person " & varData(0) & " is " & " Phone No " & varData(1) & " ,Id " & varData(2) & " ,DOB " & varData(3) End Sub
Sie müssen eine Array-Variable mit einem Index identifizieren, daher werden im obigen Beispiel die Werte als varData(0) varData(2) varData(3) abgerufen.
#2) Löschen
Diese Funktion löscht alle eingegebenen Werte für ein Array fester Größe und gibt den Speicherplatz für ein dynamisches Array frei.
Syntax: Arrayname löschen
Das Löschverhalten ist für verschiedene Datentypen unterschiedlich (siehe unten).
- Für einen festen numerischen Wert: Alle Werte werden auf Null zurückgesetzt.
- Für einen festen String-Datentyp: Alle Werte werden auf die Länge Null zurückgesetzt.
- Für ein dynamisches Array: Gibt den vom Array verwendeten Speicher frei.
Beispiel:
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 ' AllMsgBox " Werte nach Löschung " & NumArray(0) & "," & decArray(1) & " , " & strArray(1) End Sub
Ergebnis vor Verwendung der Löschfunktion
Ergebnis nach der Verwendung von Erase
#3) IsArray
Diese Funktion wird verwendet, um festzustellen, ob die angegebene Eingabevariable ein Array ist oder nicht. Sie gibt true zurück, wenn die eingegebene Variable true ist, sonst false.
Syntax : IsArray (Variablenname)
Beispiel:
Sub isArrayTest() Dim arr1, arr2 As Variant arr1 = Array("Jan", "Feb", "Mar") arr2 = "12345" MsgBox ("Ist arr1 ein Array : " & IsArray(arr1)) MsgBox ("Ist arr2 ein Array : " & IsArray(arr2)) End
Das Ergebnis der ersten Msgbox
Das Ergebnis der zweiten msgbox
#Nr. 4) Lbound
Sie gibt das niedrigste Subscript des Arrays zurück, das als Argument für die Funktion Lbound angegeben wurde.
Syntax: LBound( ArrayName, [Dimension] )
ArrayName ist der Name des Arrays.
Dimension ist ein optionaler ganzzahliger Wert. Wenn das Array mehrere Dimensionen hat, können Sie angeben, für welche Dimension Sie den Lbound bestimmen wollen.
Beispiel:
Sub lboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Array-Variablen deklarieren. Dim Arraywithoutlbound(10) Result1 = LBound(ArrayValue, 1) ' Gibt 1 zurück. Result2 = LBound(ArrayValue, 3) ' Gibt 10 zurück. Result3 = LBound(Arraywithoutlbound) MsgBox "Niedrigster Index im ersten Array " & Result1 & " niedrigster Index im 3.subscript in ArrayohneBindung " & Ergebnis3 End Sub
#Nr. 5) Ubound
Sie gibt das obere Subscript des Arrays zurück, das als Argument in der Funktion Ubound angegeben wurde.
Syntax: UBound( ArrayName, [Dimension] )
ArrayName ist der Name des Arrays.
Dimension ist der optionale ganzzahlige Wert. Wenn das Array mehrere Dimensionen hat, können Sie angeben, für welche Dimension Sie den Ubound bestimmen wollen.
Beispiel:
Sub UboundTest() Dim Result1, Result2, Result3 Dim ArrayValue(1 To 10, 5 To 15, 10 To 20) ' Array-Variablen deklarieren Dim ArraywithoutUbound(10) Result1 = UBound(ArrayValue, 1) Result2 = UBound(ArrayValue, 3) Result3 = UBound(ArraywithoutUbound) MsgBox "Niedrigster Index im ersten Array " & Result1 & " niedrigster Index im dritten Array " & Result2 & " niedrigster Index imArrayohneBindung " & Ergebnis3 End Sub
#6) Teilen
Sie gibt ein Array mit einer Anzahl von Teilzeichenketten zurück, die von der angegebenen ganzen Zeichenkette abgeleitet sind.
Syntax: Split(Ausdruck, [ Trennzeichen, [ Grenze, [ Vergleich]]])
- Ausdruck: Dies ist die gesamte Zeichenkette, die zur Erzeugung von Teilzeichenfolgen verwendet wird.
- Begrenzungszeichen: Unter Verwendung des angegebenen Begrenzungszeichens werden Teilstrings erzeugt. Wird dieses nicht angegeben, gilt das Leerzeichen als Begrenzungszeichen.
- Grenze: Anzahl der zurückzugebenden Teilstrings.
- Vergleichen Sie: Nachdem die Teilzeichenkette erzeugt wurde, können Sie verschiedene Vergleichsoptionen verwenden, um das Ergebnis zu prüfen.
Beispiel: Im folgenden Beispiel wird das Trennzeichen als - und die Grenze als 3 verwendet.
Daher wird die Split-Funktion die gesamte Zeichenkette anhand des Begrenzungszeichens in Teilzeichenketten aufteilen. Wir haben jedoch auch die Grenze von 3 angegeben, so dass nach der Grenze 3 keine Teilzeichenketten mehr gebildet werden. Daher wird das letzte Begrenzungszeichen - übersprungen.
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
#Nr. 7) Beitritt
Dies ist nur die Umkehrung von Split, Join erzeugt eine Zeichenkette, indem es mehrere Teilzeichenfolgen kombiniert.
Syntax: Join(sourcearray, [ delimiter ])
Sourcearray: Eindimensionales Array von Zeichenketten, die Sie zu einer einzigen zusammenfügen möchten.
Begrenzungszeichen: Das angegebene Trennzeichen wird beim Zusammenfügen nach jeder Zeichenfolge eingefügt.
Beispiel:
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 "Datum nach Join " & Result End Sub
Alle 3 Werte werden zusammengefügt und \ wird zwischen jedes Wort gesetzt, da wir \ als Begrenzer erwähnt haben.
#8) Filter
Der Filter ermöglicht die Suche nach einer bestimmten Übereinstimmung in einem Array. Auf der Grundlage der Filterkriterien wird die Teilmenge eines String-Arrays zurückgegeben.
Syntax: Filter(sourcearray, match, [ include, [ compare ]])
Beispiel:
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
In diesem Beispiel wird mit Hilfe der Filterfunktion in allen Array-Strings nach dem Wort "help" gesucht.
Häufig gestellte Fragen
F #1) Wie erhält man die Länge eines Arrays in VBA?
Antwort: Um die Länge eines Arrays zu ermitteln, verwenden wir die Funktion Ubound, die uns den oberen Index eines bestimmten Arrays liefert.
F #2) Wie deklariert man ein Array in VBA?
Antwort: Ein eindimensionales Array wird wie unten gezeigt deklariert.
Dim arrayname(lowerbound To UpperBound) As DataType
Beispiel: Dim Myarray(0 To 2) As Integer
Ein zweidimensionales Array wird wie unten gezeigt deklariert.
Dim ArrayName(FirstIndex To LastIndex, FirstIndex To LastIndex) As DataType.
Beispiel: Dim marks(1 To 3, 0 To 2) As Integer
F #3) Wie konvertiert man Range in Array?
Antwort: Wir können die Funktion Transpose verwenden, um den Bereich in ein Array umzuwandeln. Dieser Code erzeugt Mys[10]
Sub Example() Dim Mys As Variant Mys = Application.Transpose(Range("A1:A10")) End Sub
F #4) Was ist eine Array-Variante in VBA?
Antwort: Ein Varianten-Array akzeptiert alle Arten von Datentypen für seinen Index, d.h. Sie können verschiedene Arten von Werten in einem einzigen Array speichern.
Beispiel:
Dim arrayData(3) As Variant
arrayData(0) = "Vikas Vipal"
arrayData(1) = 411234567890#
Die Möglichkeiten, die Größe des Arrays während der Laufzeit zu ändern und die Werte mit redim preserve zu erhalten, wurden anhand von Beispielen besprochen. Schließlich lernten wir Array-Methoden kennen, die uns bei der Durchführung verschiedener Operationen helfen.