AW: Duplikate abwechsend markieren
19.09.2022 08:26:12
Alwin
Hallo Bernd,
was fehlte, um nur die Graustufen 15 und 16 zu benutzen ist doch simples vergleichen. Entweder in k ist 16 erreicht, dann zurück auf 15 oder es wird 1 dazu addiert.
Dann muss nur der Startwert für k auf 14 gesetzt werden. Mehr ist da nicht nötig. Da aber nur die beiden Graustufen benutzt werden, ist wegen der Erkennbarkeit das Sortieren erforderlich. Wenn jede gleiche Gruppe eine eigene Farbe hat, ist es mit dieser Prozedur egal ob sortiert wurde oder nicht.
geändert mit den 2 Graustufen so:
Option Explicit
Sub markieren()
Dim SL As Object, i%, j%, k%, l%, m%
Dim arrIn(), arrOut()
k = 14 ' Startwert für Farbindex
Set SL = CreateObject("System.Collections.sortedlist")
With Tabelle1
arrIn = .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp)).Value ' Alle zu vergleichenden Werte in Array
For i = 1 To UBound(arrIn) ' Ab hier werden sortiert, leere und doppelte entfernt
If arrIn(i, 1) "" Then _
SL(arrIn(i, 1)) = ""
Next i
ReDim arrOut(1 To SL.Count, 1 To 1) ' dimensioniert das Ausgabe Array für die nun sortierten Unikaten
For i = 1 To SL.Count
arrOut(i, 1) = SL.GetKey(i - 1)
Next i
For i = 1 To UBound(arrOut) ' systematischer Aufruf Werte von arrOut in Schleife i
If k = 16 Then
k = 15
Else
k = k + 1
End If
For j = 2 To .Cells(Rows.Count, 1).End(xlUp).Row ' Vergleich Wert arrOut Zellennummer i mit
If arrOut(i, 1) = .Cells(j, 1) Then ' Wert Zelle für Zelle des Tabellenblattes in Spalte A
.Cells(j, 1).Interior.ColorIndex = k ' Wenn Treffer dann .Interior.ColorIndex = k
l = l + 1 ' l zählt Anzahl der Treffer
m = j
End If
Next j
If l = 1 Then ' Wenn nur ein Treffer dann Zelle nicht einfärben
.Cells(m, 1).Interior.ColorIndex = xlNone
End If
l = 0 ' für den nächsten Schleifensprung - Treffer auf null setzten
Next i
End With
End Sub
Gruß Uwe