Hallo Clone,
ich habe mal einen Code nach meinem Verständnis gebastelt. Bei mir kommt eine leicht andere Reihenfolge heraus, als du in deiner Beispieldatei vorgegeben hast, aber schau einfach mal:
Sub umsortieren()
Dim lngLetzte As Long
Dim arrLager As Variant
Dim lngZaehler As Long
Dim a As Long
Dim b As Long
'letzte beschrieben Zeile ermitteln
lngLetzte = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Daten in Array einlesen
'hier die Spalten A bis G ab Zeile 2
arrLager = Range(Cells(2, 1), Cells(lngLetzte, 7))
'1. Datensatz wird rausgenommen
'Zähler für Reihenfolge erhöhen
lngZaehler = lngZaehler + 1
'wird herausgenommen und enthält nach Abschluss der Umsortierung den letzten Platz
arrLager(1, 6) = arrLager(UBound(arrLager, 1), 3)
'Reihenfolge
arrLager(1, 7) = lngZaehler
'nun alles umordnen
For a = LBound(arrLager, 1) To UBound(arrLager, 1)
For b = LBound(arrLager, 1) To UBound(arrLager, 1)
'alten und neuen Cluster vergleichen
If arrLager(a, 4) = arrLager(b, 5) Then
'leeren Platz gefunden?
If arrLager(b, 6) = "" Then
'Zähler für Reihenfolge erhöhen
lngZaehler = lngZaehler + 1
'Platz dem neuen Cluster zuordnen
arrLager(b, 6) = arrLager(a, 3)
'Reihenfolge
arrLager(b, 7) = lngZaehler
'b-Schleife verlassen
Exit For
End If
End If
Next b
Next a
'Daten zurückschreiben
Range(Cells(2, 1), Cells(lngLetzte, 7)) = arrLager
End Sub
Gruß
M.O.