Clever-Excel-Forum

Normale Version: Gezielte Änderung des Interior.ColorIndex
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo liebe Leute,

ich habe in der Spalte A verteilt  Zellen die ich mit

Range("A" & irgendeineZeile).Interior.ColorIndex = 15

markiert habe. Diese Markierungen möchte ich nun ändern, z.B. soll der Interior.ColorIndex in den entsprechenden Zellen von 15 auf 20 gesetzt werden.

Meine Frage, muss ich dazu mittels einer Schleife nun jede eine Zelle der Spalte A überprüfen, ob hier der ColorIndex auf 15 gesetzt wurde,

oder geht dies nicht eventuell auch schneller?
Hallo Elke,

falls eine Schleife wirklich zu langsam sein sollte, kann man die Zellen mit dem Index 15 auch mit dem Autofilter selektieren und auf einmal die Farbe wechseln. (Den Code müßte ich im pc nachsehen)

Wie sieht die Zeit-Investitionsrechnung aus? Das Ändert mag 10 Minuten dauern, wieviel Zeit wird eingespart? Ich werde aktiv bei 1000% "Zeitrendite", also wenn insgesamt über die Lebensdauer des Makros 100 Minuten eingespart werden.

mfg
Hallo Fennek,

vielen Dank für deine Antwort. Wenn ich dich richtig verstanden habe, wäre der Autofilter also die einzige Möglichkeit.

Also so etwas:

Zitat:Range("A:A").AutoFilter Field:=1, Criteria1:=RGB(192, 192, 192), Operator:=xlFilterCellColor
For Each Zelle In Range("A:A").SpecialCells(xlCellTypeVisible)
Debug.Print Zelle.Address
Next Zelle
Hallo Elke,

ja, so habe ich es gemeint. (aber besser als meine Kenntnisse, ich kann nur color bzw "Farbe der Zelle xy" nutzen)

Nach dem Autofilter kann man mit specialcells(12), entspricht "visible cells", die Auswahl setzen und für den gesamten Bereich die Farbe setzen.

mfg
Hallöchen,

es dürfte auch mit diesem Prinzip funktionieren.

Range("A1:A5").Interior.ColorIndex = 10 'Zum Test
Range("A1:A10").Interior.ColorIndex = Range("A1:A11").Interior.ColorIndex + 5 * ((Range("a1").Interior.ColorIndex <> -4142) * -1)

Ich gebe hier A1:A5 grün als Farbe, A6:A10 haben keine. Anschließend erhöhe ich in allen Zellen, die nicht keine Farbe haben, den Colorindex um 5. Man könnte die Zahl -4142 in der Multiplikation ersetzen, um nur Zellen eines bestimmten Colorindexes umzufärben. Allerdings muss man dann statt "*-1" "+1" nehmen.Ich habe hier mal -4142 genommen, wie gesagt, für ungefärbte Zellen.
Hallo Elke!
Code:
For Each Zelle In Range("A:A").SpecialCells(xlCellTypeVisible)

Das ist doppelt gemoppelt.
Die SpecialCells sind bereits ein definierter Range, der nicht per Schleife abgeklappert werden muss.
Die Überschriftenzeile muss rausgenommen werden.
Nach dem Farbfilter ändert dies den ColorIndex in einem Rutsch:
Code:
intersect(rows("2:1048576"), _
  ActiveSheet.usedrange.columns(1).specialcells(xlcelltypevisible)).Interior.colorindex=20

Gruß Ralf
Hallo Ralf,

vielen Dank für deinen interessanten Lösungsvorschlag. Da dies ein schönes prägnantes Beispiel für die Thematik
Autofilter-Intersect-UsedRange usw. ist, möchte ich hier den gesamten Code als Demo posten:


Code:
Sub Einfärben()
For i = 1 To 20 Step 2
Range("A" & i).Interior.ColorIndex = 15
Range("B" & i).Interior.ColorIndex = 15
Next i
End Sub


Sub Andere_Farbe_Als_Grau_Spalte1()
'Filter für Zellen mit Interior.ColorIndex = 15
Range("A:A").AutoFilter Field:=1, Criteria1:=RGB(192, 192, 192), Operator:=xlFilterCellColor
'Farbe in Spalte1 wechseln
Intersect(Columns(1), _
 ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeVisible)).Interior.ColorIndex = 20
'Autofilter ausschalten
ActiveSheet.AutoFilterMode = False
End Sub

Sub Alles_Entfärben()
'Alle Farben entfernen
Columns(1).Interior.ColorIndex = 0
Columns(2).Interior.ColorIndex = 0
End Sub
Hallo Ralf,

wozu benutzt du die Intersect-Methode?
So geht's doch auch:


Code:
Sub Einfärben()
For i = 1 To 20 Step 2
Range("A" & i).Interior.ColorIndex = 15
Range("B" & i).Interior.ColorIndex = 15
Next i
End Sub

Sub Wofür_Intersect()
Range("A:A").AutoFilter Field:=1, Criteria1:=RGB(192, 192, 192), Operator:=xlFilterCellColor
ActiveSheet.UsedRange.Columns(1).SpecialCells(xlCellTypeVisible).Interior.ColorIndex = 20
ActiveSheet.AutoFilterMode = False
End Sub
Hallo Kalorienbombe!
Zitat:wozu benutzt du die Intersect-Methode?
Wie ich oben bereits schrieb, um die Überschriftenzeile herauszunehmen.
Hast Du einen anderen Vorschlag?

Gruß Ralf
Hallo Ralf,

warum möchtest du denn den Header rausnehmen?

Laut Aufgabenstellung werden die ersten 2 Zellen in der ersten Zeile mit eingefärbt:


Code:
Sub Einfärben()
For i = 1 To 20 Step 2
Range("A" & i).Interior.ColorIndex = 15
Range("B" & i).Interior.ColorIndex = 15
Next i
End Sub
Seiten: 1 2