Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

FormatConditions

Forumthread: FormatConditions

FormatConditions
03.04.2017 16:07:41
Burkhard
Hallo miteinander,
bin etwas überrascht (um das Mindeste zu sagen) über folgendes Verhalten von Excel:
Ich setze per VBA eine bedingte (Farb-)Formatierung (Range.FormatConditions). Wenn ich vorher die Range (zwei Zeilen) selektiere, wird NUR die erste Zeile farbig dargestellt, wenn die Bedingung zutrifft. Wenn ich das select vermeide und die Range direkt anspreche, wird NUR die zweite Zeile eingefärbt.
Folgender Code:
'    gwCheckSheet.Range(sFormatRange).Select		' sFormatRange ist "A4:J5"
'    With Selection
With gwCheckSheet.Range(sFormatRange)
.FormatConditions.Delete
sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionCorrect & Chr(34)
' sRange ist "A4"
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
' sConditionFormula ist "=$A4="correct""
.FormatConditions.Item(1).Interior.Color = RGB(205, 255, 155)
sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionDelete & Chr(34)
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
' sConditionFormula ist "=$A4="delete""
.FormatConditions.Item(2).Interior.Color = RGB(255, 205, 205)
End With
Der aktive Code färbt A5:J5 (wenn A4 = "correct" oder "delete") - der mit dem select färbt A4:J4. Eigentlich sollten sich ja in beiden Fällen A4:J5 ändern, oder?
Hab ich da irgendwo einen Knoten im Hirn? Oder im Code?
Grüße
Burkhard
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: FormatConditions
03.04.2017 17:03:20
ChrisL
Hi Burkhard
Funktioniert doch...
Sub t()
Dim gwCheckSheet As Worksheet
Dim sConditionFormula As String
Dim sFormatRange As String
Dim sRange As String
Dim csActionCorrect As String
Dim csActionDelete As String
Set gwCheckSheet = Worksheets("Tabelle1")
sFormatRange = "A4:J5"
sRange = "A4"
csActionCorrect = "correct"
csActionDelete = "delete"
With gwCheckSheet.Range(sFormatRange)
.FormatConditions.Delete
sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionCorrect & Chr(34)
' sRange ist "A4"
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
' sConditionFormula ist "=$A4="correct""
.FormatConditions.Item(1).Interior.Color = RGB(205, 255, 155)
sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionDelete & Chr(34)
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
' sConditionFormula ist "=$A4="delete""
.FormatConditions.Item(2).Interior.Color = RGB(255, 205, 205)
End With
End Sub

cu
Chris
Anzeige
AW: FormatConditions
03.04.2017 18:20:13
Burkhard
Hallo Chris,
das Ergebnis scheint davon abzuhängen, welche Zelle beim Ausführen der .FormatConditions gerade aktiv (selektiert) ist!
selektiert     gefärbt
A3           nichts!
A4            A4:J4
B4            A4:J4
A4:J4         A4:J4
A5            A5:J5
B5            A5:J5
B5:J5         A5:J5
A4:J5         A4:J4
A6           nichts!

Ich habe das dutzende Male ausprobiert; was ich nicht hinbekomme ist die Einfärbung von A4:J5.
Ist dieses Verhalten ein Fehler oder eine "Eigenart" der FormatConditions, ist da irgendwas bekannt? Gibt es noch andere Fallen, wo die direkte Adressierung unterlaufen wird? Wäre gar nicht schön ...
Grüße
Burkhard
Anzeige
AW: FormatConditions
03.04.2017 18:57:19
ChrisL
Hi Burkhard
Schwarzer Schwan...
https://support.microsoft.com/de-de/help/895562/the-conditional-formatting-may-be-set-incorrectly-when-you-use-vba-in-excel
Absolute Bezüge oder vorgängige Selektion wird vorgeschlagen.
Vielleicht mal eine Index-Bedingung probieren z.B.
=INDEX($A$1:$A$1000;ZEILE();1)="xyz"
cu
Chris
Anzeige
AW: FormatConditions
04.04.2017 09:00:09
Burkhard
Hallo Chris,
das Rätsel ist gelöst: "absolute Bezüge" und "vollständig" sind die Zauberformeln, wie auch in dem Microsoft-Artikel, dessen Link du mir geschickt hast (und den ich lieber in Englisch lese, da kapier ich's auf Anhieb):
Wenn die beiden Range-Angaben wirklich komplett absolut referenziert werden ($A$1 statt $A1) und damit auch die sConditionFormula absolut ist, dann funktioniert's! Es werden sogar beide Zeilen (A4:J5) gefärbt, was mit der vorgängigen Selektion nicht wirklich hinhaut.
Vielen Dank für deine Hilfe!
Grüße
Burkhard
Anzeige
AW: FormatConditions
04.04.2017 09:40:44
ChrisL
Hi Burkhard
Danke für die Rückmeldung, allerdings hätte ich noch einen kleinen Vorbehalt.
Für die absoluten Bezüge hast du vermutlich eine Schleife über die Zeilen gemacht. Somit erhält jede Zeile eine eigene Bedingung, was die Ressourcen unnötig belastet. Bei nur zwei Zeilen ist dies natürlich nicht schlimm, aber ansonsten hätte ich die Index-Variante gewählt:
Sub t()
Dim gwCheckSheet As Worksheet
Dim sConditionFormula As String
Dim sFormatRange As String
Dim sRange As String
Dim csActionCorrect As String
Dim csActionDelete As String
Set gwCheckSheet = Worksheets("Tabelle1")
sFormatRange = "A4:J5"
sRange = "INDEX($A:$A;ZEILE();1)"
csActionCorrect = "correct"
csActionDelete = "delete"
With gwCheckSheet.Range(sFormatRange)
.FormatConditions.Delete
sConditionFormula = "=" & sRange & "=" & Chr(34) & csActionCorrect & Chr(34)
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
.FormatConditions.Item(1).Interior.Color = RGB(205, 255, 155)
sConditionFormula = "=" & sRange & "=" & Chr(34) & csActionDelete & Chr(34)
.FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
.FormatConditions.Item(2).Interior.Color = RGB(255, 205, 205)
End With
End Sub

cu
Chris
Anzeige
;
Anzeige

Infobox / Tutorial

Bedingte Formatierung mit VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere die Entwicklertools: Stelle sicher, dass die Entwicklertools in der Menüleiste sichtbar sind.
  2. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Einfügen eines neuen Moduls: Klicke mit der rechten Maustaste auf VBAProject (DeineArbeitsmappe) und wähle Einfügen > Modul.
  4. Code eingeben: Füge den folgenden Code in das Modul ein und passe die Variablen nach Bedarf an:
Sub BedingteFormatierung()
    Dim gwCheckSheet As Worksheet
    Set gwCheckSheet = Worksheets("Tabelle1")

    Dim sFormatRange As String
    sFormatRange = "A4:J5"

    Dim sConditionFormula As String
    Dim sRange As String
    sRange = "A4"

    Dim csActionCorrect As String
    Dim csActionDelete As String
    csActionCorrect = "correct"
    csActionDelete = "delete"

    With gwCheckSheet.Range(sFormatRange)
        .FormatConditions.Delete
        sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionCorrect & Chr(34)
        .FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
        .FormatConditions(1).Interior.Color = RGB(205, 255, 155)

        sConditionFormula = "=$" & sRange & "=" & Chr(34) & csActionDelete & Chr(34)
        .FormatConditions.Add Type:=xlExpression, Formula1:=sConditionFormula
        .FormatConditions(2).Interior.Color = RGB(255, 205, 205)
    End With
End Sub
  1. Code ausführen: Schließe den VBA-Editor und kehre zu Excel zurück. Drücke ALT + F8, wähle BedingteFormatierung und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Problem: Nur eine Zeile wird farbig dargestellt.

    • Lösung: Stelle sicher, dass die Bedingungen in der Formatierungsregel absolut referenziert sind, z.B. =$A$4.
  • Problem: Der Code funktioniert nicht wie erwartet.

    • Lösung: Überprüfe, ob die Selektion der Zellen die erwarteten Werte enthält, bevor der Code ausgeführt wird.
  • Problem: Fehlerhafte Anwendung der FormatConditions.

    • Lösung: Verwende die Methode .FormatConditions.Delete, um vorherige Regeln zu löschen, bevor neue hinzugefügt werden.

Alternative Methoden

Eine alternative Methode zur Nutzung von bedingten Formatierungen ist die Verwendung von Index-Funktionen in der Formel. Beispielhaft könnte dies so aussehen:

sRange = "INDEX($A:$A,ZEILE(),1)"

Damit können dynamische Bereiche angesprochen werden, was besonders nützlich ist, wenn sich deine Daten häufig ändern.


Praktische Beispiele

Hier sind einige praktische Anwendungen der bedingten Formatierung mit VBA:

  1. Färbung bei bestimmten Werten:

    • Wenn in Zelle A4 "correct" steht, werden die Zellen A4:J4 grün gefärbt. Bei "delete" werden sie rot gefärbt.
  2. Mehrere Bedingungen:

    • Du kannst mehrere FormatConditions hinzufügen, um verschiedene Farben für unterschiedliche Werte zu definieren.

Tipps für Profis

  • Verwende die .FormatConditions.Add-Methode, um mehrere Regeln in einem Schritt zu definieren.
  • Achte darauf, dass du die richtige Excel-Version verwendest, um sicherzustellen, dass alle Funktionen wie erwartet arbeiten.
  • Teste deine Bedingungen gründlich, um sicherzustellen, dass sie in allen Fällen korrekt funktionieren.

FAQ: Häufige Fragen

1. Warum funktioniert die bedingte Formatierung nur sporadisch? Es könnte sein, dass die aktiven Zellen beim Ausführen des Codes nicht die richtigen Werte enthalten. Überprüfe die aktive Zelle vor dem Ausführen des Codes.

2. Wie kann ich mehrere bedingte Formatierungen für einen Bereich hinzufügen? Nutze die Methode .FormatConditions.Add mehrmals für unterschiedliche Bedingungen. Achte darauf, jede Regel klar zu definieren.

3. Was sind absolute Bezüge und warum sind sie wichtig? Absolute Bezüge fixieren die Zellenadresse in der Formel, sodass sich die Bedingung nicht ändert, wenn die Formatierung auf andere Zellen angewendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige