Array-Element finden und ändern in Excel VBA
Schritt-für-Schritt-Anleitung
-
Array deklarieren: Du musst zunächst ein Array deklarieren, um Daten für einen Zeitraum zu speichern. Hier ein einfaches Beispiel, um ein Array mit Daten für ein Jahr zu füllen:
Sub Test()
Dim Abzisse() As Variant
Dim i As Integer
For i = 1 To 365
ReDim Preserve Abzisse(0, i)
Abzisse(0, i) = DateAdd("d", i, Date)
Next i
End Sub
-
Datum suchen: Verwende die Funktion WorksheetFunction.Match
, um das gesuchte Datum zu finden. In diesem Fall suchen wir nach dem Datum "01.01.2020":
i = WorksheetFunction.Match("01.01.2020", Abzisse, 0)
-
Werte ändern: Nachdem du das Datum gefunden hast, kannst du die gewünschten Werte im Array ändern. Hier wird das gefundene Datum und die nachfolgenden Werte auf einen bestimmten Wert gesetzt:
For i = i To 365
Abzisse(0, i) = sDatum
Next i
Häufige Fehler und Lösungen
-
Fehler: "Typ nicht definiert": Stelle sicher, dass du das Array korrekt deklariert hast. Verwende Variant
, wenn du die Größe des Arrays nicht im Voraus festlegen kannst.
-
Fehler: "Match-Funktion gibt Fehler zurück": Dieser Fehler tritt häufig auf, wenn das Datum nicht im Array vorhanden ist. Überprüfe die Formatierung des Datums und stelle sicher, dass es im Array korrekt gespeichert ist.
Alternative Methoden
Anstelle der Match
-Funktion kannst du auch eine Schleife verwenden, um das Datum manuell zu suchen. Dies könnte in Situationen nützlich sein, in denen du eine benutzerdefinierte Logik anwenden möchtest:
For i = 1 To UBound(Abzisse, 2)
If Abzisse(0, i) = CDate("01.01.2020") Then
' Hier kannst du die gewünschten Änderungen vornehmen.
End If
Next i
Praktische Beispiele
Hier ist ein vollständiges Beispiel, das sowohl das Suchen als auch das Ändern eines Arrays zeigt:
Sub Test()
Dim Abzisse() As Variant
Dim i As Integer
Dim sDatum As String
' Array mit Daten füllen
For i = 1 To 365
ReDim Preserve Abzisse(0, i)
Abzisse(0, i) = DateAdd("d", i, Date)
Next i
' Datum suchen
i = WorksheetFunction.Match("01.01.2020", Abzisse, 0)
sDatum = Abzisse(0, i - 1)
' Werte ändern
For i = i To 365
Abzisse(0, i) = sDatum
Next i
End Sub
Tipps für Profis
-
Verwendung von ReDim Preserve
: Beachte, dass ReDim Preserve
nur die letzte Dimension des Arrays beibehält. Plane deine Arrays entsprechend.
-
Debugging: Nutze Debug.Print
oder das lokale Fenster, um den Inhalt deines Arrays während der Ausführung zu überprüfen. Dies kann dir helfen, Fehler schneller zu erkennen.
-
Performance: Bei großen Arrays kann die Performance beeinträchtigt werden. Versuche, die Anzahl der ReDim Preserve
-Aufrufe zu minimieren, indem du die Größe des Arrays im Voraus festlegst, wenn möglich.
FAQ: Häufige Fragen
1. Wie kann ich ein mehrdimensionales Array verwenden?
Du kannst ein mehrdimensionales Array einfach deklarieren, indem du die Dimensionen angibst, z.B. Dim Abzisse(1 To 365, 1 To 2)
.
2. Welche Excel-Version benötige ich für die Verwendung von VBA?
VBA ist in den meisten Desktop-Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Excel für Microsoft 365.