In diesem Tutorial erfahren Sie, wie Sie ein Array mit eindeutigen Werten aus einer Spalte in VBA füllen.
Array mit eindeutigen Werten aus Spalte füllen
Um eine Liste von Werten aus einem Excel-Blatt in ein Array aufzunehmen, müssen Sie die Zeilen in Excel durchlaufen und das Array füllen.
Betrachten Sie die folgende Liste von Kunden in einer Excel-Tabelle.
Mit einer Schleife könnten wir ein Array in VBA füllen. Eine Standardschleife durchläuft jedoch jede Zeile, einschließlich doppelter Zeilen, und Sie erhalten doppelte Werte in Ihrem Array.
Die Lösung zum Durchlaufen der Zellen und zum Auffüllen eines Collection-Objekts mit den Werten als Collection-Objekt lässt keine Duplikate zu. Sie können dann dieses Sammlungsobjekt verwenden, um Ihr Array aufzufüllen.
1234567891011121314151617181920212223242526 | Unter PopulateUniqueArray()Dim StrCustomers() As StringDim Col als neue KollektionDim valCell als StringDim i As IntegerDim n As Integer'zähle die Zeilen im Bereichn = Range("A1", Range("A1").End(xlDown)).Rows.Count'Vorübergehende Sammlung bevölkernBei Fehler Fortsetzen als nächstesFür i = 0 bis nvalCell = Range("A1").Offset(i, 0).WertCol.Add valCell, valCellAls nächstesErr.ClearBei Fehler GoTo 0'Größe ändern nn = Spaltenanzahl'Array neu deklarierenReDim StrCustomers(1 bis n)'Array auffüllen, indem man die Sammlung durchläuftFor i = 1 To Col.CountStrCustomers(i) = Col(i)Als nächstesDebug.Print Join(StrCustomers(), vbCrLf)End Sub |
Array mit eindeutigen Werten füllen - Funktion
Das obige Beispiel zeigte ein Verfahren, das Ihre gewünschten Aktionen ausführen würde. Aber stattdessen bevorzugen Sie vielleicht eine portable Funktion, um die Aufgabe auszuführen:
123456789101112131415161718192021222324 | Funktion CreateUniqueList(nStart as Long, nEnd as long) as VariantDim Col als neue KollektionDim arrTemp() Wie ZeichenfolgeDim valCell als StringDim i As Integer'Vorübergehende Sammlung bevölkernBei Fehler Fortsetzen als nächstesFür i = 0 bis nEndvalCell = Range("A" & nStart).Offset(i, 0).WertCol.Add valCell, valCellAls nächstesErr.ClearBei Fehler GoTo 0'Größe ändern nnEnd = Spaltenanzahl'Array neu deklarierenReDim arrTemp(1 bis nEnde)'Auffüllen des temporären Arrays durch Durchlaufen der SammlungFor i = 1 To Col.CountarrTemp(i) = Spalte(i)Als nächstes'das temporäre Array an das Funktionsergebnis zurückgebenCreateUniqueList = arrTemp()Endfunktion |
Um die Funktion zu verwenden, müssen Sie sie aus einer Unterprozedur aufrufen:
123456789 | Unter PopulateArray()Dim StrCustomers() As StringDim strCol als KollektionDim n As Long'zähle die Zeilen im Bereichn = Range("A1", Range("A1").End(xlDown)).Rows.Count'Führen Sie die Funktion aus, um ein Array mit eindeutigen Werten zu erstellenstrCustomers() = CreateUniqueList(1,n)End Sub |