Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Gezielte Änderung des Interior.ColorIndex
#1
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?
Antworten Top
#2
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
Antworten Top
#3
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
Antworten Top
#4
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
Antworten Top
#5
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.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#6
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
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
Antworten Top
#8
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
Antworten Top
#9
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
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#10
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
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste