VBA Arrays: Erstellen, Verwalten und Löschen – Der vollständige Leitfaden
Hier ist ein ausführliches Tutorial zum Thema Arrays in VBA (Excel) – von der Erstellung bis zum Löschen.
Ein Array (Datenfeld) ist eine spezielle Variable, die mehrere Werte desselben Datentyps unter einem einzigen Namen speichern kann. Dies ist besonders nützlich, wenn du mit Listen oder Tabellendaten arbeitest.
1. Arrays erstellen (Deklarieren)
In VBA gibt es zwei Arten von Arrays: Statische (feste Größe) und Dynamische (flexible Größe).
A. Statische Arrays
Verwende ein statisches Array, wenn du im Voraus genau weißt, wie viele Elemente du speichern möchst.
Sub StatischesArrayBeispiel()
' Ein Array für 5 Namen deklarieren (Index 0 bis 4)
Dim namen(4) As String
' Werte zuweisen
namen(0) = "Max"
namen(1) = "Anna"
namen(2) = "Lukas"
namen(3) = "Julia"
namen(4) = "Felix"
MsgBox "Der erste Name ist: " & namen(0)
End Sub
Hinweis: In VBA beginnt der Index standardmäßig bei 0. Dim namen(4) reserviert also Platz für 5 Elemente.
B. Dynamische Arrays
Verwende ein dynamisches Array, wenn sich die Anzahl der Elemente während der Laufzeit ändern kann.
Sub DynamischesArrayBeispiel()
' Array ohne Größe deklarieren
Dim zahlen() As Integer
' Größe später festlegen mit ReDim
ReDim zahlen(2)
zahlen(0) = 10
zahlen(1) = 20
zahlen(2) = 30
' Größe ändern und bestehende Daten behalten (Preserve)
ReDim Preserve zahlen(3)
zahlen(3) = 40
End Sub
2. Arrays füllen und auslesen
Am effizientesten füllst du Arrays mit Schleifen oder direkt aus einem Excel-Bereich.
Aus einer Range füllen (sehr schnell):
Sub RangeToArray()
Dim daten As Variant
' Liest den Bereich A1:A10 direkt in ein Array ein
daten = Range("A1:A10").Value
' Zugriff: daten(Zeile, Spalte) -> Bei Range-Arrays beginnt der Index immer bei 1!
MsgBox daten(1, 1)
End Sub
3. Arrays löschen und leeren
Je nachdem, ob es sich um ein statisches oder dynamisches Array handelt, bewirkt der Befehl Erase unterschiedliche Dinge.
A. Den Befehl Erase verwenden
Dies ist die Standardmethode, um Arrays zu bereinigen.
Sub ArrayLoeschen()
Dim meinArray() As String
ReDim meinArray(5)
' ... Array wird genutzt ...
' Array löschen
Erase meinArray
End Sub
Was passiert bei Erase?
- Bei dynamischen Arrays: Der Speicherplatz wird komplett freigegeben. Das Array ist danach "leer" und hat keine Dimensionen mehr. Du müsstest erneut
ReDimnutzen, um es wieder zu verwenden. - Bei statischen Arrays: Die Werte werden auf ihren Standardwert zurückgesetzt (Null bei Zahlen, Leerstring
""bei Strings), aber die Größe des Arrays bleibt erhalten.
B. Einzelne Elemente löschen
Wenn du nur einen bestimmten Wert löschen willst, weist du ihm einfach den Standardwert zu:
namen(2) = "" ' Löscht den Inhalt an Index 2
4. Wichtige Tipps & Funktionen
LBound und UBound
Verwende immer LBound (Lower Bound) und UBound (Upper Bound), um die Grenzen eines Arrays zu ermitteln. Das macht deinen Code sicherer gegen Fehler.
Sub ArrayDurchlaufen()
Dim i As Long
Dim arr As Variant
arr = Array("VBA", "ist", "cool")
For i = LBound(arr) To UBound(arr)
Debug.Print arr(i)
Next i
End Sub
Zusammenfassung der Befehle:
| Befehl | Beschreibung |
|---|---|
Dim arr(n) |
Erstellt ein statisches Array mit fester Größe. |
Dim arr() |
Deklariert ein dynamisches Array. |
ReDim arr(n) |
Legt die Größe eines dynamischen Arrays fest (löscht Inhalt). |
ReDim Preserve arr(n) |
Ändert die Größe, behält aber die vorhandenen Werte bei. |
Erase arr |
Leert das Array bzw. gibt den Speicher frei. |
Fazit
Arrays sind ein mächtiges Werkzeug in VBA, um die Performance deiner Makros zu steigern. Während Dim und ReDim für die Struktur zuständig sind, ist Erase der wichtigste Befehl, um den Arbeitsspeicher sauber zu halten.