Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

bedingte Formatierung suchen u. ersetzen durch VBA

Forumthread: bedingte Formatierung suchen u. ersetzen durch VBA

bedingte Formatierung suchen u. ersetzen durch VBA
19.03.2009 06:55:03
Peter
Guten Tag
Ich habe in einer Tabelle an verchiedenen Orten immer die gleiche bedingte Formatierung (Bedingung ist eine Formel). Nun möchte ich diese überall durch eine andere bedingte Formatierung ersetzen.
Ist dies möglich, mit Hilfe von VBA? Wenn ja, wie?
Danke für eine Antwort.
Gruss, Peter
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: bedingte Formatierung ersetzen - VBA
19.03.2009 08:18:31
Erich
Hi Peter,
so als Prototyp:

Option Explicit
Sub Makro1()
With Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions)
.Select
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=A5>1,5"
End With
.FormatConditions(1).Interior.ColorIndex = 34
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: bedingte Formatierung ersetzen - VBA
19.03.2009 10:44:17
Peter
Hallo Erich
Vielen Dank für den Prototyp. Der funktioniert einwandfrei. Bei mir ist die bedingte Formatierung etwas umfangreicher und ich habe es nicht geschafft, die nachstehend auskommentierten Codezeilen einzubauen.
Für Hilfe bin ich dankbar.
Gruss, Peter

Sub AAAABedingte_Formatierung()
With ActiveWorkbook.Sheets("Jahresrechnung")
With Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions)
.Select
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=A5>1,5"
End With
.FormatConditions(1).Interior.ColorIndex = 34
End With
''      With .FormatConditions(1).Borders(xlLeft)
''        .LineStyle = xlContinuous
''        .Weight = xlThin
''        .ColorIndex = xlAutomatic
''   With .FormatConditions(1).Borders(xlLeft)
''        .LineStyle = xlContinuous
''        .Weight = xlThin
''        .ColorIndex = xlAutomatic
''    End With
''    With .FormatConditions(1).Borders(xlRight)
''        .LineStyle = xlContinuous
''        .Weight = xlThin
''        .ColorIndex = xlAutomatic
''    End With
''    With .FormatConditions(1).Borders(xlTop)
''        .LineStyle = xlContinuous
''        .Weight = xlThin
''        .ColorIndex = xlAutomatic
''    End With
''    With .FormatConditions(1).Borders(xlBottom)
''        .LineStyle = xlContinuous
''        .Weight = xlThin
''        .ColorIndex = xlAutomatic
''    End With
''    With .FormatConditions(1).Interior
''        .ColorIndex = 22
''        .Pattern = xlSemiGray75
''    End With
End With
End Sub


Anzeige
AW: bedingte Formatierung ersetzen - VBA
19.03.2009 12:41:03
Daniel
Hi
das liegt nicht an den bedingten Formaten, sondern daran, daß du dich in der Struktur der WITH-Klammern verheddert hast. Wenn man die richtig stellt, funktionierts einwandfrei.

Sub AAAABedingte_Formatierung()
With ActiveWorkbook.Sheets("tabelle1")
With .Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions)
.Select
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=A5>1,5"
End With
.FormatConditions(1).Interior.ColorIndex = 34
With .FormatConditions(1).Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .FormatConditions(1).Borders(xlLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .FormatConditions(1).Borders(xlRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .FormatConditions(1).Borders(xlTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .FormatConditions(1).Borders(xlBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .FormatConditions(1).Interior
.ColorIndex = 22
.Pattern = xlSemiGray75
End With
End With
End With
End Sub


(den Sheetnamen habe ich zum Testen angepasst)
allerdings würde ich empfehlen, beim Formulieren der Formel für die Bedingtte Formatierung die Z1S1-Schreibweise zu verwenden und nicht die A1-Schreibweise.
die A1-Schreibweise ist gefährlich, da es hier auch darauf ankommt, welche Zelle gerade aktiv, daher ist hier die Z1S1-Schreibweise wesentlich sicherer.
du kannst die Z1S1-Schreibweise genauso verwenden (in Deutsch), wie die A1-Schreibweise, ohne irgendwelche andern Angaben machen zu müssen. bei der Bedingent Formatierung ist es Excel egal.
Gruß, Daniel

Anzeige
AW: etwas übersichtlicher
19.03.2009 13:08:43
Erich
Hi Peter,
so ist es etwas übersichtlicher:

Sub AAAABedingte_Formatierung2()
With ActiveWorkbook.Sheets("Tabelle1")
With .Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions)
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=Z(-1)S1>1,5" 'anpassen
End With
With .FormatConditions(1)
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Interior
.ColorIndex = 22
.Pattern = xlSemiGray75
End With
End With
End With
End With
End Sub

Zwei Dinge waren bei deinem Code doppelt:
.FormatConditions(1).Interior.ColorIndex = 34 und
'' With .FormatConditions(1).Interior
'' .ColorIndex = 22
und die Borders(xlLeft). Aber das reichen ja jetzt die Borders ohne Klammern aus.
Das ".Select" wird - wegen Z1S1 - nicht mehr gebraucht.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: etwas übersichtlicher
19.03.2009 22:15:48
Peter
Hallo Erich und Daniel
Vielen Dank für die Lösung. Diese funktioniert so grundsätzlich. In meiner etwas umfangreicheren Vorlage (aus der ich praktisch allen Text entfernt habe), passiert jedoch etwas zuviel:
Alle bedingten Formatierungen sind in der Spalte E enthalten und nur diese sollen geändert werden. Wenn ich nun den Makro laufen lasse, wird die bedingte Formatierung praktisch im ganzen Druckbereich eingegeben, anstelle in Spalte E.
Im hochgeladenen Datei ist in Spalte E bereits die neue Formatierung drin. Spielt für die Demo, dass auch die anderen Spalten mit bedingter Formatierung versehen werden allerdings keine Rolle.
Es wäre super, wenn der Makro auch in dieser Vorlage funktionieren würde.
Gruss, Peter
https://www.herber.de/bbs/user/60478.xls
Anzeige
AW: etwas übersichtlicher
20.03.2009 00:15:32
Erich
Hi Peter,
in den beiden folgenden Varianten sind die Änderungen der bed. Formatierung
auf Spalte E begrenzt:

Option Explicit
Sub AAAABedingte_Formatierung3()
With ActiveWorkbook.Sheets("Jahresrechnung")
With Intersect(.Columns(5), _
.Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions))   ' bed.Form Sp. E
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=WENN(ISTFEHLER(Check_A+Check_V)" _
& ";1;WENN(RUNDEN(Check_A+Check_V;2)0;1;0))" 'anpassen
End With
With .FormatConditions(1)
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Interior
.ColorIndex = 22
.Pattern = xlSemiGray75
End With
End With
End With
End With
End Sub
Sub AAAABedingte_Formatierung4()
With ActiveWorkbook.Sheets("Jahresrechnung")
With Intersect(.Columns(5), _
.Cells(1, 5).SpecialCells(xlCellTypeSameFormatConditions)) 'bed.Form. wie E1
With .FormatConditions
.Delete
.Add Type:=xlExpression, Formula1:="=WENN(ISTFEHLER(Check_A+Check_V)" _
& ";1;WENN(RUNDEN(Check_A+Check_V;2)0;1;0))" 'anpassen
End With
With .FormatConditions(1)
With .Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With .Interior
.ColorIndex = 22
.Pattern = xlSemiGray75
End With
End With
End With
End With
End Sub

Übrigens:
Die verbundenen Zellen tragen erheblich zum Problem bei. Verbundene Zellen sind IMHO des Teufels.
Ich würde sie ersetzen durch Format "Über Auswahl zentrieren".
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: etwas übersichtlicher
20.03.2009 14:55:53
Peter
Hallo Erich
Der Code funktioniert nun einwandfrei.
Danke auch für den Hinweis zu "Über Auswahl zentrieren".
Ich werde hier partiell umstellen können. Allerdings brauche ich in bestimmten Berichten verbundene Zellen, da ich bei Berichten mit Zahlenkollonnen keine andere Möglichkeit kenne, wenn die Textblöcke in Blocksatz erscheinen sollen.
Nochmals besten Dank für alle Unterstützung.
Gruss, Peter
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Bedingte Formatierung in Excel durch VBA ändern


Schritt-für-Schritt-Anleitung

Um die bedingte Formatierung in Excel mithilfe von VBA zu ändern, folge diesen Schritten:

  1. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu:

    • Klicke im Projekt-Explorer mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.
  3. Füge den folgenden Code ein:

    Option Explicit
    Sub BedingteFormatierungÄndern()
       With ActiveWorkbook.Sheets("Jahresrechnung")
           With Intersect(.Columns(5), _
           .Cells(1, 1).SpecialCells(xlCellTypeAllFormatConditions))
               .FormatConditions.Delete
               .FormatConditions.Add Type:=xlExpression, Formula1:="=A5>1,5"
               With .FormatConditions(1)
                   With .Borders
                       .LineStyle = xlContinuous
                       .Weight = xlThin
                       .ColorIndex = xlAutomatic
                   End With
                   With .Interior
                       .ColorIndex = 22
                       .Pattern = xlSemiGray75
                   End With
               End With
           End With
       End With
    End Sub
  4. Passe den Code nach Bedarf an:

    • Ändere den Blattnamen und die Formel entsprechend deiner Anforderungen.
  5. Führe das Makro aus:

    • Drücke F5 oder gehe zu Run > Run Sub/UserForm.

Häufige Fehler und Lösungen

  • Fehler: „Objekt nicht gefunden“

    • Stelle sicher, dass der Name des Arbeitsblatts korrekt ist. Überprüfe Groß- und Kleinschreibung.
  • Fehler: „Keine Formatierungen gefunden“

    • Achte darauf, dass die Zellen tatsächlich bedingte Formatierungen haben, bevor du das Makro ausführst.
  • Fehler beim Ausführen des Makros

    • Vergewissere dich, dass Du die richtigen Zellreferenzen verwendest. Bei Verwendung von SpecialCells sollten die Zellen bereits Formatierungen haben.

Alternative Methoden

Wenn du keine VBA-Lösung verwenden möchtest, kannst du auch manuell die bedingte Formatierung in Excel anpassen:

  1. Gehe zu „Start“ > „Bedingte Formatierung“ > „Regeln verwalten“.
  2. Wähle die Regel aus und klicke auf „Bearbeiten“.
  3. Ändere die Formel oder die Formatierungen nach Bedarf.

Für umfangreiche Anpassungen bleibt VBA jedoch die flexibelste Lösung.


Praktische Beispiele

Hier ein Beispiel, wie du mehrere bedingte Formatierungen mit VBA anwenden kannst:

Sub MehrereBedingteFormatierungen()
    With ActiveWorkbook.Sheets("Jahresrechnung")
        With .Cells.SpecialCells(xlCellTypeAllFormatConditions)
            .FormatConditions.Delete
            .FormatConditions.Add Type:=xlExpression, Formula1:="=A1>100"
            .FormatConditions(1).Interior.ColorIndex = 3 ' Rot
            .FormatConditions.Add Type:=xlExpression, Formula1:="=A1<50"
            .FormatConditions(2).Interior.ColorIndex = 4 ' Grün
        End With
    End With
End Sub

Dieses Beispiel zeigt, wie du mehrere Bedingungen in einer Tabelle einfügen kannst.


Tipps für Profis

  • Nutze die Z1S1-Schreibweise für Formeln in VBA, um Missverständnisse zu vermeiden, besonders wenn sich die aktive Zelle ändert.
  • Verwende xlThin und xlAutomatic für die Linien von Formaten, um konsistente Ergebnisse zu erzielen.
  • Teste deinen Code in einer Kopie deiner Datei, um versehentliche Änderungen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich die bedingte Formatierung nur auf bestimmte Zellen anwenden?

  • Du kannst die Zellen, auf die die Regel angewendet werden soll, im Code mit Intersect einschränken, wie im Abschnitt „Schritt-für-Schritt-Anleitung“ gezeigt.

2. Was sind die Vorteile von VBA gegenüber der manuellen Anpassung?

  • VBA ermöglicht automatisierte und wiederholbare Anpassungen, was besonders bei großen Datenmengen oder häufigen Änderungen vorteilhaft ist.

Diese Anleitung sollte dir helfen, die bedingte Formatierung in Excel mithilfe von VBA effizient zu ändern.

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