Bedingte Formatierung

Hallo zusammen,

Leider habe ich nicht wirklich Erfahrung im Programmieren und habe jetzt das Problem einzelne Zellen anhand von mehreren Bedingungen formatieren zu müssen.

Beispiel:
In Zeile 2-7 sollen die Spalten B-E einerseits folgendermaßen formatiert werden:


For Each cell In Range(„B2:E32“)
If cell.Value = „F“ Then cell.Interior.ColorIndex = 4
If cell.Value = „S“ Then cell.Interior.ColorIndex = 4
If cell.Value = „FS“ Then cell.Interior.ColorIndex = 4
If cell.Value = „U“ Then cell.Interior.ColorIndex = 44
If cell.Value = „HO“ Then cell.Interior.ColorIndex = 15
If cell.Value = „SU“ Then cell.Interior.ColorIndex = 42
Next

was auch funktioniert.

Es sollte jedoch noch der Fall sein, dass wenn z.B. in Zeile 2 der Wert F und S oder FS enthalten ist, auch die bisher nicht farblich hinterlegen Zellen der Zeile im Bereich C-E ebenfalls grün hinterlegt werden. Die übrigen Zeilen in der Tabelle sollten jeweils auf die gleiche Art und Weise reagieren.

Über Tipps und Lösungsansätze würde ich mich sehr freuen.

Vielen Dank.

Gruß Susanne

Hallo Susanne,

probier mal folgenden Makro aus. ich hoffe ich habe deine Beschreibung richtig verstanden, dann müsste es funktionieren.
Für alle VBA-Experten: ich weiß, das ist Spaghetti-Code, und man kann es bestimmt eleganter lösen. Aber auf die Schnelle fiel mir nichts besseres ein.

Sub formatierung()
For zeile = 2 To 32
For spalte = 2 To 5
Select Case Cells(zeile, spalte)
Case Is = „F“, „S“, „FS“
Range(Cells(zeile, 1), Cells(zeile, 5)).Interior.ColorIndex = 4
Case Is = „U“
Range(Cells(zeile, 1), Cells(zeile, 5)).Interior.ColorIndex = 44
Case „HO“
Range(Cells(zeile, 1), Cells(zeile, 5)).Interior.ColorIndex = 15
Case „SU“
Range(Cells(zeile, 1), Cells(zeile, 5)).Interior.ColorIndex = 42
End Select
Next spalte
Next zeile
End Sub

Gruß, Andreas

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Susanne.

Beispiel:
In Zeile 2-7 sollen die Spalten B-E einerseits folgendermaßen
formatiert werden:


For Each cell In Range(„B2:E32“)
If cell.Value = „F“ Then cell.Interior.ColorIndex = 4

If cell.Value = „S“ Then cell.Interior.ColorIndex = 4

If cell.Value = „FS“ Then cell.Interior.ColorIndex = 4

If cell.Value = „U“ Then cell.Interior.ColorIndex = 44

If cell.Value = „HO“ Then cell.Interior.ColorIndex =
15
If cell.Value = „SU“ Then cell.Interior.ColorIndex =
42

Du kannst folgende Syntax hinter „Then“ verwenden, um einen Bereich zu färben:

Range("B2", "E2").Interior.ColorIndex = 4

Bitte beachte, daß dies nur ein fixes Beispiel ist. Der Wert „2“ muß ja bestimmt variabel gemacht werden.

Viele Grüße
Carsten

Hallo Susanne,

probier mal folgenden Makro aus. ich hoffe ich habe deine
Beschreibung richtig verstanden, dann müsste es funktionieren.
Für alle VBA-Experten: ich weiß, das ist Spaghetti-Code, und
man kann es bestimmt eleganter lösen. Aber auf die Schnelle
fiel mir nichts besseres ein.

Sub formatierung()
For zeile = 2 To 32
For spalte = 2 To 5
Select Case Cells(zeile, spalte)
Case Is = „F“, „S“, „FS“
Range(Cells(zeile, 1), Cells(zeile,
5)).Interior.ColorIndex = 4
Case Is = „U“
Range(Cells(zeile, 1), Cells(zeile,
5)).Interior.ColorIndex = 44
Case „HO“
Range(Cells(zeile, 1), Cells(zeile,
5)).Interior.ColorIndex = 15
Case „SU“
Range(Cells(zeile, 1), Cells(zeile,
5)).Interior.ColorIndex = 42
End Select
Next spalte
Next zeile
End Sub

Gruß, Andreas

Hallo Andreas,

Vielen Dank für deine Antwort, wahrscheinlich habe ich mich missverständlich ausgedrückt, ich möchte die Zeile nur dann grün einfärben, wenn 2 Bedingungen erfüllt sind.
Die Tabelle soll sich wie der folgende Abschnitt verhalten:

http://www.flickr.com/photos/12454543@N03/

Gruß Susanne

Vielen Dank für deine Antwort, wahrscheinlich habe ich mich
missverständlich ausgedrückt, ich möchte die Zeile nur dann
grün einfärben, wenn 2 Bedingungen erfüllt sind.
Die Tabelle soll sich wie der folgende Abschnitt verhalten:

http://www.flickr.com/photos/12454543@N03/

Hi Susanne,

ich erkenne da für die leeren Zellen keinerlei Farbenlogik, mal von der Chaostheorie abgesehen :smile:

Gruß
Reinhard

Hallo Andreas,

Vielen Dank für deine Antwort, wahrscheinlich habe ich mich
missverständlich ausgedrückt, ich möchte die Zeile nur dann
grün einfärben, wenn 2 Bedingungen erfüllt sind.
Die Tabelle soll sich wie der folgende Abschnitt verhalten:

http://www.flickr.com/photos/12454543@N03/

Gruß Susanne

Hi Susanne,

danke für den Upload. Ich hoffe, jetzt hab ichs kapiert. Allerdings konnte ich mit den roten Zellen nichts anfangen. Aber egal. Probiers mal hiermit:

Option Explicit
Sub formatieren()
Dim s As Boolean, f As Boolean, fs As Boolean
Dim zeile As Long, spalte As Long

Range(Cells(1, 1), Cells(32, 5)).Interior.ColorIndex = xlColorIndexNone
For zeile = 1 To 32
s = False
f = False
fs = False
For spalte = 2 To 5
Select Case Cells(zeile, spalte)
Case „F“, „S“, „FS“
Cells(zeile, spalte).Interior.ColorIndex = 4
If Cells(zeile, spalte) = „F“ Then
f = True
ElseIf Cells(zeile, spalte) = „S“ Then
s = True
ElseIf Cells(zeile, spalte) = „FS“ Then
fs = True
End If
Case „U“
Cells(zeile, spalte).Interior.ColorIndex = 44
Case „HO“
Cells(zeile, spalte).Interior.ColorIndex = 15
Case „SU“
Cells(zeile, spalte).Interior.ColorIndex = 42
End Select
Next spalte
For spalte = 2 To 5
If ((f And s) Or fs) And Cells(zeile, spalte).Interior.ColorIndex = xlColorIndexNone Then
Cells(zeile, spalte).Interior.ColorIndex = 4
End If
Next spalte
Next zeile
End Sub

Gruß, Andreas

Hallo,

Ok dann versuch ich mal ein wenig das Durcheinander zu entwirren.
Die Farbverteilung ist:

  1. hellgelb: Zeilenfarbe fürs Wochende
    1. Spalte alles Grün
  2. 2.-4. Spalte alles rot
  3. wenn Änderungen erfolgen, z.B. ein F eingetragen wird, dann wird die neue Feldfarbe grün
    ( If cell.Value = „F“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „S“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „FS“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „U“ Then cell.Interior.ColorIndex = 44
    If cell.Value = „HO“ Then cell.Interior.ColorIndex = 15
    If cell.Value = „SU“ Then cell.Interior.ColorIndex = 42)

Hinzukommen soll nun, dass wenn in einer Zeile die Werte F und S enthalten sind, dass diese Zeile (Spalte 2.-4.) komplett grün hinterlegt wird. Gleiches soll passieren, wenn in einer Zeile der Wert FS steht.
Und genau hier liegt mein Problem, ich schaffe es nicht die Farbe
der Zeile geknüpft an 2 Bedingungen farblich zu verändern.

Gruß Susanne

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Ok dann versuch ich mal ein wenig das Durcheinander zu
entwirren.

Hi Susanne,
okay, jetzt habe ich es verstanden *glaub*

Jetzt stellen sich Fragen, soll das für eine neu anzulegende Datei gelten, also Überprüfung der Eingabe und Farbänderung bei jeder Zelleneingabe, die ja auch Zellenlöschung bedeuten kann.

Oder existieren schon große Tabellen und die sollen farblich getrimmt werden?

Oder gar beides, was aufwendiger ist und mir vielleicht zu aufwendig.

Lösbar ist es mit Vba allemal.

Vom Grundansatz her, in der jeweiligen Zeile (lassen wir mal WE weg.)
Spalte 1 grün, 2-4 rot machen.
Prüfen ob (F ^ S) oder (FS) vorliegt, dannn Sp2-4 grün
Wenn nicht, dann einzelne Zellprüfung of F,S,FS und dann jeweils Zelle grün.
Dann die Prüfung auf U,HU usw.

Gruß
Reinhard

Hallo,

Ok dann versuch ich mal ein wenig das Durcheinander zu
entwirren.
Die Farbverteilung ist:

  1. hellgelb: Zeilenfarbe fürs Wochende
    1. Spalte alles Grün
  2. 2.-4. Spalte alles rot
  3. wenn Änderungen erfolgen, z.B. ein F eingetragen wird, dann
    wird die neue Feldfarbe grün
    ( If cell.Value = „F“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „S“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „FS“ Then cell.Interior.ColorIndex = 4
    If cell.Value = „U“ Then cell.Interior.ColorIndex = 44
    If cell.Value = „HO“ Then cell.Interior.ColorIndex =
    15
    If cell.Value = „SU“ Then cell.Interior.ColorIndex =

Hinzukommen soll nun, dass wenn in einer Zeile die Werte F und
S enthalten sind, dass diese Zeile (Spalte 2.-4.) komplett
grün hinterlegt wird. Gleiches soll passieren, wenn in einer
Zeile der Wert FS steht.
Und genau hier liegt mein Problem, ich schaffe es nicht die
Farbe
der Zeile geknüpft an 2 Bedingungen farblich zu verändern.

Gruß Susanne

Hallo Susanne,
hier noch mal eine neue Version des Makros. Vielleicht ist es jetzt das, was du möchtest. Falls nicht, denke ich, dass du ihn dir selber so anpassen kannst, wie du es brauchst.
Gruß, Andreas

Option Explicit
Sub formatieren()
Dim s As Boolean, f As Boolean, fs As Boolean
Dim zeile As Long, spalte As Long
Dim woche As Integer, tag As Integer

zeile = 1
For woche = 1 To 5
For tag = 1 To 5
Cells(zeile, 1).Interior.ColorIndex = 4
Range(Cells(zeile, 2), Cells(zeile, 4)).Interior.ColorIndex = 3
zeile = zeile + 1
Next tag
Range(Cells(zeile, 1), Cells(zeile + 1, 4)).Interior.ColorIndex = 36
zeile = zeile + 2
Next woche
For zeile = 1 To woche * 7
s = False
f = False
fs = False
For spalte = 1 To 4
Select Case Cells(zeile, spalte)
Case „F“, „S“, „FS“
Cells(zeile, spalte).Interior.ColorIndex = 4
If Cells(zeile, spalte) = „F“ Then
f = True
ElseIf Cells(zeile, spalte) = „S“ Then
s = True
ElseIf Cells(zeile, spalte) = „FS“ Then
fs = True
End If
Case „U“
Cells(zeile, spalte).Interior.ColorIndex = 44
Case „HO“
Cells(zeile, spalte).Interior.ColorIndex = 15
Case „SU“
Cells(zeile, spalte).Interior.ColorIndex = 42
End Select
Next spalte
For spalte = 2 To 4
If ((f And s) Or fs) Then
Cells(zeile, spalte).Interior.ColorIndex = 4
End If
Next spalte
Next zeile
End Sub