VBA – Array mit eindeutigen Werten aus einer Spalte auffüllen
In diesem Tutorial lernen Sie, wie Sie in VBA ein Array mit eindeutigen Werten aus einer Spalte auffüllen können.
Array mit eindeutigen Werten aus einer Spalte auffüllen
Um eine Liste von Werten aus einem Excel-Blatt in ein Array zu übernehmen, müssen Sie lediglich die Zeilen in Excel in einer Schleife durchlaufen und das Array auffüllen.
Betrachten Sie die folgende Kundenliste in der Excel-Tabelle.
Mit einer Schleife könnten wir ein Array in VBA auffüllen. Eine Standard-Schleife durchläuft jedoch jede Zeile einschließlich doppelter Zeilen und Sie erhalten doppelte Werte in Ihrem Array.
Die Lösung besteht darin, die Zellen in einer Schleife zu durchlaufen und ein Collection-Objekt mit den Werten zu füllen, da dieses keine Duplikate zulässt. Dann können Sie dieses Collection-Objekt verwenden, um Ihr Array aufzufüllen.
Sub ArrayEindeutigAuffuellen()
Dim StrKunden() As String
Dim Col As New Collection
Dim wertZelle As String
Dim i As Integer
Dim n As Integer
'Zeilen im Bereich zählen
n = Range("A1", Range("A1").End(xlDown)).Rows.Count
'Temporäre Sammlung auffüllen
On Error Resume Next
For i = 0 To n
wertZelle = Range("A1").Offset(i, 0).Value
Col.Add wertZelle, wertZelle
Next i
Err.Clear
On Error GoTo 0
'Größe ändern
n = Col.Count
'Array neu deklarieren
ReDim StrKunden(1 To n)
'Array in einer Schleife durch die Sammlung füllen
For i = 1 To Col.Count
StrKunden(i) = Col(i)
Next i
Debug.Print Join(StrKunden(), vbCrLf)
End Sub
Array mit eindeutigen Werten auffüllen (Funktion)
Das obige Beispiel zeigt eine Prozedur, die die gewünschten Aktionen ausführen würde. Sie könnten jedoch stattdessen eine tragbare Funktion zur Durchführung der Aufgabe bevorzugen:
Function EindeutigeListeErstellen(nAnfang as Long, nEnde as long) as Variant
Dim Col As New Collection
Dim arrTemp() As String
Dim wertZelle As String
Dim i As Integer
'Temporäre Sammlung auffüllen
On Error Resume Next
For i = 0 To nEnd
wertZelle = Range("A" & nAnfang).Offset(i, 0).Value
Col.Add wertZelle, wertZelle
Next i
Err.Clear
On Error GoTo 0
'Größe von n ändern
nEnde = Col.Count
'Array neu deklarieren
ReDim arrTemp(1 To nEnde )
'Temporäres Array in einer Schleife durch die Sammlung auffüllen
For i = 1 To Col.Count
arrTemp(i) = Col(i)
Next i
'Das temporäre Array an das Funktionsergebnis zurückgeben
EindeutigeListeErstellen = arrTemp()
End Function
Um die Funktion zu verwenden, müssen Sie sie von einer Unterprozedur aus aufrufen:
Sub ArrayAuffuellen()
Dim StrKunden() As String
Dim strCol as Collection
Dim n As Long
'Zeilen im Bereich zählen
n = Range("A1", Range("A1").End(xlDown)).Rows.Count
'Die Funktion ausführen, um ein Array mit eindeutigen Werten zu erstellen
strKunden() = EindeutigeListeErstellen(1,n)
End Sub