AW: Unikatliste aus mehreren Sheets
13.06.2023 14:20:40
Herbert_Grom
Hallo Daniel,
gerade habe ich es geschafft und es funzt. Die "Function" habe ich beim Googlen gerade noch gefunden.
Sub ArrayFuellen()
Dim arrWerte(), ArrZutaten() As String, lLastRow&
Dim lTab& '* Tabellenzähler
Dim lZaehler& '* Zähler für Array-Datenzeilen
Im lRow& '* Zeilenzähler in den Törtchen-Sheets
'* letzte Zeile in den Törtchen-Sheets
lLastRow = Tab03.Cells(Rows.Count, "C").End(xlUp).Row - 7
Application.ScreenUpdating = False
'* alle Sheets durchlaufen
For lTab = 3 To Worksheets.Count
With Worksheets(lTab)
For lRow = 4 To lLastRow
If .Cells(lRow, 2) = "" Then GoTo next_tab
lZaehler = lZaehler + 1
ReDim Preserve arrWerte(lZaehler)
arrWerte(lZaehler) = .Cells(lRow, 2)
Next lRow
lRow = 1
End With
next_tab:
Next lTab
'* vorhandene Zutatenliste löschen
Range("A4:A" & lRow + 1).ClearContents
'* Function starten
ArrZutaten = ArrayDuplikateEntfernen(arrWerte)
'* Zutaten-Array in Tabelle eintragen
lRow = UBound(ArrZutaten)
Range("A4:A" & lRow + 3) = Application.Transpose(ArrZutaten)
Range("A4:A" & lRow + 3).Sort Key1:=Range("A4"), Order1:=xlAscending, Header:=xlNo
End Sub
Function ArrayDuplikateEntfernen(MeinArray As Variant) As Variant
Dim nErste&, nLetzte&, i&, Element$, arrTemp() As String, Coll As New Collection
'Erste und letzte Array-Position ermitteln
nErste = LBound(MeinArray)
nLetzte = UBound(MeinArray)
ReDim arrTemp(nErste To nLetzte)
'Array in String umwandeln
For i = nErste To nLetzte
arrTemp(i) = CStr(MeinArray(i))
Next i
'Temporäre Sammlung auffüllen
On Error Resume Next
For i = nErste To nLetzte
Coll.Add arrTemp(i), arrTemp(i)
Next i
Err.Clear
On Error GoTo 0
'Größe des Arrays ändern
nLetzte = Coll.Count + nErste - 1
ReDim arrTemp(nErste To nLetzte)
'Array auffüllen
For i = nErste To nLetzte
arrTemp(i) = Coll(i - nErste + 1)
Next i
'Array ausgeben
ArrayDuplikateEntfernen = arrTemp
End Function
Vielen Dank
Servus