Ich möchte die Zellwerte eines Bereiches (z.B. b1 bis b5) in einen Array einlesen. Später will ich dann prüfen, ob ein wert bereits in diesem Array enthalten ist. Wenn nein, soll er eingefügt werden.
Wie kann ich sowas machen?
Danke und Gruß
Rainer
Sub t()
Dim iZeile As Integer
Dim neuerWert As Variant
' Array abfüllen
ReDim MyArray(4) As Variant
For iZeile = 1 To 5
MyArray(iZeile - 1) = Cells(iZeile, 2)
Next iZeile
neuerWert = "A"
' Check ob Wert vorhanden
For iZeile = 0 To UBound(MyArray)
If MyArray(iZeile) = neuerWert Then
MsgBox "Wert existiert bereits"
Exit Sub
End If
Next iZeile
' Array redimensionieren
ReDim Preserve MyArray(UBound(MyArray) + 1)
' Neuer Wert hinzufügen
MyArray(UBound(MyArray)) = neuerWert
MsgBox "neuer Wert hinzugefügt."
End Sub
Um Zellwerte in ein Array einzutragen und diese später wieder auszulesen, kannst du den folgenden VBA-Code verwenden. Dieser Ansatz ermöglicht es dir, die Werte aus einem bestimmten Zellbereich (z.B. B1 bis B5) in ein Array zu laden und zu überprüfen, ob ein neuer Wert bereits darin enthalten ist.
Sub t()
Dim iZeile As Integer
Dim neuerWert As Variant
' Array abfüllen
ReDim MyArray(4) As Variant
For iZeile = 1 To 5
MyArray(iZeile - 1) = Cells(iZeile, 2)
Next iZeile
neuerWert = "A"
' Check ob Wert vorhanden
For iZeile = 0 To UBound(MyArray)
If MyArray(iZeile) = neuerWert Then
MsgBox "Wert existiert bereits"
Exit Sub
End If
Next iZeile
' Array redimensionieren
ReDim Preserve MyArray(UBound(MyArray) + 1)
' Neuer Wert hinzufügen
MyArray(UBound(MyArray)) = neuerWert
MsgBox "neuer Wert hinzugefügt."
End Sub
Dieser Code zeigt, wie du mit Excel VBA Zellwerte aus einem Bereich auslesen und in ein VBA Array speichern kannst. Zudem wird überprüft, ob ein neuer Wert bereits im Array vorhanden ist.
Fehler: "Typenkonflikt" beim Zuweisen von Werten
Variant, um unterschiedliche Datentypen zu akzeptieren.Fehler: "Unterlauf" beim Redimensionieren des Arrays
UBound. Vermeide das Redimensionieren vor der Initialisierung.Eine alternative Methode, um Werte aus einer Matrix auszulesen, ist die Verwendung von Collections oder Dictionaries. Diese bieten eine flexiblere Handhabung von Werten, da sie automatisch Duplikate verhindern.
Dim myCollection As New Collection
On Error Resume Next
myCollection.Add neuerWert, CStr(neuerWert)
On Error GoTo 0
Diese Methode eignet sich besonders gut, wenn du die Werte aus einer größeren Datenmenge ohne manuelle Überprüfung der Duplikate speichern möchtest.
Angenommen, du möchtest die Werte aus einem Bereich (zum Beispiel B1 bis B5) in ein Array einlesen und die Werte in einer MsgBox ausgeben. Der folgende Code zeigt, wie du dies umsetzen kannst:
Sub WerteAusgeben()
Dim iZeile As Integer
Dim MyArray() As Variant
ReDim MyArray(4) As Variant
For iZeile = 1 To 5
MyArray(iZeile - 1) = Cells(iZeile, 2)
Next iZeile
For iZeile = LBound(MyArray) To UBound(MyArray)
MsgBox MyArray(iZeile)
Next iZeile
End Sub
Dieser Code hilft dir dabei, die Excel Werte aus der Matrix auszulesen und in einer Nachricht anzuzeigen.
Debug.Print, um Zwischenergebnisse im Direktfenster auszugeben und die Codeausführung zu überwachen.ArrayList für dynamische Arrays, die sich automatisch anpassen.On Error Resume Next, es sei denn, du weißt genau, was du tust. Dies kann das Debugging erschweren.1. Wie kann ich ein mehrdimensionales Array in VBA erstellen?
Du kannst ein mehrdimensionales Array wie folgt deklarieren:
Dim MyArray(1 To 5, 1 To 2) As Variant
2. Was ist der Unterschied zwischen ReDim und ReDim Preserve?
ReDim erstellt ein neues Array und löscht die vorherigen Werte, während ReDim Preserve die vorhandenen Werte beibehält, solange du nur die letzte Dimension des Arrays änderst.