Hallo Bernd,
ist der nicht etwas umständlich? Zumal der Code, wenn ich nichts übersehen hab, auch jede Zelle einzeln abhandelt. Ich weiß jetzt nicht, seit wann es das DisplayFormat gibt, aber eventuell ist der Code noch von vor der Zeit.
Eventuell kann man die Sache optimieren, wenn man Ranges gleicher Farbe bildet und die dann einfärbt statt einzelne Zellen zu nehmen?
Ich müsste nach wie vor jede Zellfarbe einzeln auslesen, kann aber das Einfärben deutlich beschleunigen. Man sammelt nur die Farben, filtert dann danach und wandelt die sichtbaren Zellen entsprechend um bzw. merkt sich die Bereiche für das Zielblatt und trägt dort die Farben ein.
Im Prinzip so. Hier werden alle sichtbaren Zellfarben übernommen, egal, ob bedingt oder nicht.
Option Explicit
Sub FarbenFixieren()
'by schauan 2019
'Variablendeklarationen
Dim Zellen As Range, iCnt As Integer
Dim colFarben As Collection, colRanges As Collection
'Collection fuer Farben setzen
Set colFarben = New Collection
'Bei Fehler weiter mit nächstem Kommando
'fuer eindeutige Fuellung der Collection
On Error Resume Next
'Schleife ueber alle Zellen im Bereich ...
For Each Zellen In Range("A1:A10")
'Farbe hinzufuegen
colFarben.Add Zellen.DisplayFormat.Interior.Color, Str(Zellen.DisplayFormat.Interior.Color)
'Ende Schleife ueber alle Zellen im Bereich ...
Next
'Fehlerbehandlung zuruecksetzen
On Error GoTo 0
'Collection fuer Bereiche setzen
Set colRanges = New Collection
'Bereich fuer Filterung selectieren
Range("A1:A10").Select
'Filter aktivieren
Selection.AutoFilter
'Schleife ueber Anzahl Farben
For iCnt = 1 To colFarben.Count
'Filter nach sichtbarer Farbe
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:=colFarben(iCnt), Operator:=xlFilterCellColor
'Bereiche in Collection aufnehmen
colRanges.Add Selection.SpecialCells(xlVisible).Address
'Ende Schleife ueber Anzahl Farben
Next
'Autofilter aufheben
Selection.AutoFilter
'Schleife ueber Anzahl Farben
For iCnt = 1 To colFarben.Count
'Zellen faerben (5 Spalten offsetiert)
ActiveSheet.Range(colRanges(iCnt)).Offset(0, 5).Interior.Color = colFarben(iCnt)
'Ende Schleife ueber Anzahl Farben
Next
End Sub
VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media
Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0