Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1508to1512
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Bedingte Formatierung in Schleife

Bedingte Formatierung in Schleife
25.08.2016 01:56:07
Daniel
Hallo!
In Tabelle1 sind Zellen die eine benutzerdefinierte Formatierung bekommen sollen (Hintergrundfarbe).
Der Wert in der ausschlaggebenden Zelle soll mit einem Wert in Tabelle2 (Data) verglichen werden. Die Farbe, die verwendet werden soll liegt auch in Tabelle2 (Data)
Wollte das ganze nun kurz programmieren. Das wäre eine Schleife ja glaube ich nicht schlecht.
ABER:
colorArea.FormatConditions(1).Interior.Color
Da kann ich anstelle der (1) den Zähler (counter) der Schleife nicht verwenden, dann funktioniert das nicht.
Wie muss man das machen?
Will ja nicht für 30 Bedingungen den Code manuell anpassen. Ausserdem soll es dynamisch werden. Wenn noch mehr Bedingungen dazu kommen soll es trotzdem noch funktionieren.
Sub fixafarger3()
Dim colorArea As Range
Dim villkorArea As Range
Dim areaAll As Range
Dim Counter As Integer
Set colorArea = Blad1.Range("C8:J11") ', C16:J19, C22:J26")
Set areaAll = Blad1.Range("C7:J26")
areaAll.FormatConditions.Delete
For Counter = 1 To 30
colorArea.FormatConditions.Add Type:=xlExpression, Formula1:="=OM(C$8=data!$A$" &  _
Counter & ";SANT;"""")" 'SANT bedeutet WAHR
colorArea.FormatConditions(1).Interior.Color = Data.Cells(Counter, 2).Interior. _
Color
Next Counter
End Sub
Hier eine Beispiel Datei
https://www.herber.de/bbs/user/107823.xlsm
Viele Grüsse
Daniel

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Bedingte Formatierung in Schleife
25.08.2016 07:54:25
baschti007
Hey Daniel,
Ich würde das so machen

Sub fixafarger3()
Dim colorArea As Range
Dim villkorArea As Range
Dim areaAll As Range
Dim Counter As Integer
Dim Last As Long
Dim ws As Worksheet
Last = Worksheets("Data").Cells(1048576, 1).End(xlUp).Row
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = "Data" Then
Set areaAll = ws.Range("C7:J26")
areaAll.FormatConditions.Delete
Set colorArea = ws.Range("C8:J11")
For Counter = 3 To Last
colorArea.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:=Data. _
Cells(Counter, 1)
colorArea.FormatConditions(Counter - 2).Interior.Color = Data.Cells(Counter, 2). _
Interior.Color
Next Counter
Counter = 1
End If
Next
End Sub
ps. Schreibschutz von Blatt 03 muss entfernt werden
Gruß Basti
Anzeige
AW: Bedingte Formatierung in Schleife
26.08.2016 04:09:43
Daniel
Hallo Basti!
Vielen Dank für die Hilfe.
Ich habe das Makro nun noch etwas ausgebaut (noch ne Schleife reingemacht, weil die Farben in mehreren Blöcken angezeigt werden müssen) aber das Makro stürzt ab **wenn es auf das nächste worksheet geht.**
Die Original Datei hat übrigens 31 worksheets, nicht nur 3 wie in der Beispiel Datei unten.
In dieser Zeile:
Set colorArea = ws.Range(Cells(ProductRow, 3), Cells(ProductRow + 3, 10))
Die Formel für die Farben muss übrigens so sein wie ich sie eingegeben habe (es sollen mehrere Zellen farbig werden, nicht nur die in der das Wort steht)
Sub fixafarger5()
Dim colorArea As Range
Dim villkorArea As Range
Dim areaAll As Range
Dim Counter As Integer
Dim Last As Long
Dim ws As Worksheet
Dim ProductRowCounter As Long
Dim ProductRow As Integer
Last = Worksheets("Data").Cells(Rows.Count, 1).End(xlUp).Row
For Each ws In ThisWorkbook.Worksheets
If Not ws.Name = "Data" Then
ws.Unprotect
Set areaAll = ws.Range("C7:J26")
areaAll.FormatConditions.Delete
ProductRow = 8
ProductRowCounter = 1
For ProductRowCounter = 1 To 3
Set colorArea = ws.Range(Cells(ProductRow, 3), Cells(ProductRow + 3, 10))
For Counter = 3 To Last
colorArea.FormatConditions.Add Type:=xlExpression, Formula1:="=OM(C$" &  _
ProductRow & "=data!$A$" & Counter & ";SANT;"""")"
colorArea.FormatConditions(Counter - 2).Interior.Color = Data.Cells( _
Counter, 2).Interior.Color
Next Counter
Counter = 1
ProductRow = ProductRow + 6
Next ProductRowCounter
End If
ws.Protect
Next ws
End Sub

Hier die neue Beispiel Datei:

Die Datei https://www.herber.de/bbs/user/107842.xlsm wurde aus Datenschutzgründen gelöscht


Hast du ne Idee warum das nicht weiterläuft?
Viele Grüsse
Daniel
Anzeige
AW: Bedingte Formatierung in Schleife
26.08.2016 06:25:46
Luschi
Hallo Daniel,
hier mal meine Änderungen: https://www.herber.de/bbs/user/107843.xlsm
Beachte bei diesen Konstrukt:
Set colorArea = ws.Range(Cells(ProductRow, 3), Cells(ProductRow + 3, 10))
daß Range und Cells auf das gleiche Tabellenblatt zeigen. Das ist bei Cells aber nicht gegeben, da Cells so immer auf das gerade sichtbare Tabellenblatt zeigt, ws aber durch die For-Schleife umschaltet auf das Nächste.
Deshalb so:

With ws
Set colorArea = .Range(.Cells(ProductRow, 3), .Cells(ProductRow + 3, 10))
End With
Außerdem habe ich diesen Befehlsblock vor die For-eife gezogen, da sich in der Schleife die Zuweisung zu 'colorArea' nicht ändert.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Bedingte Formatierung in Schleife
26.08.2016 10:48:42
Daniel
Hallo Luschi!
Herzlichen Dank für die Berichtigung! Und die Erklärung. Musste ich etwas drüber nachdenken, habe es dann aber verstanden und konnte es auch gleich bei anderen Fehlern anwenden!
Danke!
Viele Grüsse
Daniel

310 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige