Array-Größe während der Laufzeit anpassen in Excel VBA
Schritt-für-Schritt-Anleitung
Um die Größe eines Arrays während der Laufzeit in Excel VBA anzupassen, kannst Du folgende Schritte befolgen:
-
Array deklarieren: Starte mit der Deklaration des Arrays. In diesem Beispiel verwenden wir ein Variant-Array, das verschiedene Datentypen aufnehmen kann.
Dim aMaps() As Variant
-
Letzte Zeile ermitteln: Bestimme die letzte Zeile in Deiner Datenquelle, um die Größe des Arrays dynamisch anzupassen.
last_cell = Cells(Rows.Count, 1).End(xlUp).Row
-
Array anpassen: Nutze ReDim
und ReDim Preserve
, um die Array-Größe anzupassen. Beachte, dass mit Preserve
nur die letzte Dimension eines Arrays geändert werden kann.
ReDim Preserve aMaps(1, last_cell - 2)
-
Daten einfügen: Fülle das Array mit Werten aus den Zellen.
For i = 2 To last_cell
aMaps(i - 2, 0) = Cells(i, 1).Value
aMaps(i - 2, 1) = Cells(i, 2).Value
Next i
Häufige Fehler und Lösungen
-
Fehler: "Index außerhalb des gültigen Bereichs": Dieser Fehler tritt auf, wenn Du versuchst, auf ein nicht existierendes Element im Array zuzugreifen. Überprüfe die Indizes und stelle sicher, dass Du die Größe des Arrays korrekt anpasst.
-
Lösung: Nutze ReDim Preserve
korrekt, um sicherzustellen, dass Du beim Ändern der Array-Größe die bestehende Datenstruktur beibehältst.
Alternative Methoden
Wenn Du nicht mit ReDim Preserve
arbeiten möchtest, kannst Du auch die gesamte Datenreihe in einem Schritt in ein Array laden:
Sub test()
Dim aMaps As Variant
Dim LastCell As Long
LastCell = Cells(Rows.Count, 1).End(xlUp).Row
aMaps = Range(Cells(2, 1), Cells(LastCell, 2)).Value
End Sub
Diese Methode ist effizient, da sie die gesamte Datenreihe auf einmal in das Array lädt.
Praktische Beispiele
Hier ist ein einfaches Beispiel, wie Du die Array-Größe während der Laufzeit ändern kannst:
Sub test()
Dim aMaps() As Variant
Dim last_cell As Long
last_cell = Cells(Rows.Count, 1).End(xlUp).Row
ReDim aMaps(1 To last_cell - 1, 1 To 2)
For i = 2 To last_cell
aMaps(i - 2, 1) = Cells(i, 1).Value
aMaps(i - 2, 2) = Cells(i, 2).Value
Next i
End Sub
In diesem Beispiel kannst Du die Array-Größe
an die Anzahl der Zeilen in Deiner Excel-Tabelle anpassen.
Tipps für Profis
-
Verwende UBound
und LBound
: Diese Funktionen helfen Dir, die obere und untere Grenze eines Arrays zu ermitteln, was nützlich ist, wenn Du mit dynamischen Arrays arbeitest.
-
Leistungsoptimierung: Wenn Du große Datenmengen verarbeiten musst, ziehe in Betracht, die Daten zuerst in ein Array zu laden, bevor Du sie bearbeitest. Dies kann die Leistung erheblich steigern.
FAQ: Häufige Fragen
1. Wie kann ich die Größe eines Arrays in VBA ermitteln?
Du kannst die Größe eines Arrays mit UBound(aMaps)
für die obere Grenze und LBound(aMaps)
für die untere Grenze ermitteln.
2. Was ist der Unterschied zwischen ReDim
und ReDim Preserve
?
ReDim
initialisiert ein neues Array und entfernt alle vorhandenen Daten, während ReDim Preserve
die vorhandenen Daten im Array beibehält, jedoch nur für die letzte Dimension.
3. Kann ich die Größe eines Arrays in einer Schleife ändern?
Ja, Du kannst die Größe eines Arrays in einer Schleife ändern, aber sei vorsichtig, dass Du ReDim Preserve
nur für die letzte Dimension verwendest, um Datenverlust zu vermeiden.