Dynamisches Anpassen von Arrays in Excel VBA
Schritt-für-Schritt-Anleitung
-
Array deklariert: Beginne mit der Deklaration deines dynamischen Arrays. Verwende Dim arrAL() in der Option Explicit-Deklaration.
Dim arrAL() As Long
-
ReDim Preserve: Um die Größe des Arrays dynamisch anzupassen, nutze ReDim Preserve. Beachte, dass nur die hinteren Dimensionen des Arrays beibehalten werden.
ReDim Preserve arrAL(0 To AnzSpalten - 1)
-
Neues Array füllen: Falls du die gesamte Struktur anpassen musst und nicht nur die hinteren Dimensionen, erstelle ein neues Array und kopiere die Werte.
Dim newArray() As Long
ReDim newArray(0 To AnzSpalten - 1)
For i = LBound(arrAL) To UBound(arrAL)
newArray(i) = arrAL(i)
Next i
arrAL = newArray
-
Anpassung während der Eingabe: Wenn sich sowohl die Anzahl der Artikel als auch die Warengruppen ändern, kannst du in einer Schleife die ReDim Preserve-Anweisung verwenden, um das Array schrittweise anzupassen.
Häufige Fehler und Lösungen
-
Fehler: "Außerhalb des Bereichs!": Dieser Fehler tritt auf, wenn du versuchst, ein Array außerhalb seiner definierten Grenzen anzupassen. Achte darauf, dass du die Limits korrekt setzt.
-
Lösung: Stelle sicher, dass du die neue Größe des Arrays vor der Verwendung von ReDim Preserve korrekt berechnest.
Alternative Methoden
-
Verwendung von Collections: Eine Collection kann eine flexiblere Alternative zu Arrays sein, insbesondere wenn du nicht sicher bist, wie viele Elemente du später benötigst. Sie ermöglicht das Hinzufügen und Entfernen von Elementen ohne das Risiko, Elemente zu verlieren.
Dim myCollection As Collection
Set myCollection = New Collection
myCollection.Add "NeuesElement"
Praktische Beispiele
Hier ist ein Beispiel, wie du ein vba dynamisches Array füllen kannst. Dieses Beispiel zeigt den Umgang mit einer Matrix, die aus einem Array von Arrays besteht.
Option Explicit
Option Base 0
Type Zeilenarray
arr_Spalten() As Long
End Type
Sub test()
Dim arr_Zeilen() As Zeilenarray
Dim Anz_Zeilen As Long
Dim Anz_Spalten As Long
Dim i As Long, k As Long
Anz_Zeilen = 10
Anz_Spalten = 5
ReDim Preserve arr_Zeilen(Anz_Zeilen)
For i = 0 To Anz_Zeilen - 1
ReDim Preserve arr_Zeilen(i).arr_Spalten(Anz_Spalten)
For k = 0 To Anz_Spalten - 1
arr_Zeilen(i).arr_Spalten(k) = i * k
Debug.Print arr_Zeilen(i).arr_Spalten(k)
Next
Next
End Sub
Tipps für Profis
-
Verwende Option Base 1: Wenn du mit dynamischen Arrays arbeitest, kann es hilfreich sein, die Basis auf 1 zu setzen, um die Lesbarkeit zu erhöhen.
-
Lege eine Maximalgröße fest: Wenn deine Anwendung es zulässt, definiere eine Maximalgröße für dein dynamisches Array, um die Performance zu verbessern.
FAQ: Häufige Fragen
1. Was ist der Unterschied zwischen einem statischen und einem dynamischen Array?
Ein statisches Array hat eine feste Größe, während ein dynamisches Array zur Laufzeit angepasst werden kann.
2. Wie kann ich ein dynamisches Array in Excel VBA füllen?
Du kannst ein dynamisches Array in VBA füllen, indem du ReDim Preserve verwendest und die Werte in einer Schleife zuweist.
3. Gibt es eine Möglichkeit, ein Array zurückzusetzen?
Ja, indem du einfach ReDim arrAL() ohne Preserve verwendest, wird das Array zurückgesetzt, aber alle Werte gehen verloren.