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

Forumthread: Bedingte Formatierung per Makro ein-/ausschalten

Bedingte Formatierung per Makro ein-/ausschalten
Maris
Hi Leute,
ich habe gestern einen Tipp zur Gruppierung per bedingter Formatierung erhalten. Excel färbt mit folgender Funktion die Spalte/n in "Hellblau" ein.
=REST(SUMMENPRODUKT(N($AA$1:$AA1$AA$2:$AA2));2)
Der Bereich dafür ist =$B$2:$BZ$2000
Das funktioniert auch wunderbar, jedoch wird mein Excel sehr langsam. Ich würde jetzt gerne die Funktion in ein Makro übernehmen und bei Klick auf bspw. ein Textfeld sollen alle Datenfelder eingefärbt werden und bei erneutem Klick soll die Einfärbung wieder rückgängig gemacht werden.
In Spalte AA ist das Vergleichskriterium.
Danke und Grüsse,
Maris
Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
18.08.2010 08:11:58
Maris
Hi zusammen,
ist das eigentlich einfach umsetzbar? Wenn nicht muß ich leider auf dieses sinnvolle Feature verzichten :-(
Gruß
Maris
AW: Bedingte Formatierung per Makro ein-/ausschalten
18.08.2010 10:29:23
Klaus
Hallo Maris,
setze in einen ToggleButton für true:
    Range("B2:BZ2000").FormatConditions.Delete
und für false:
    Range("B2:BZ2000").FormatConditions.Add Type:=xlExpression, Formula1:= _
"=REST(SUMMENPRODUKT(N($AA$1:$AA1$AA$2:$AA2));2)"
Range("B2:BZ2000").FormatConditions(1).Interior.ColorIndex = 34
Das sollte die bedingte Formatierung an / aus schalten.
Grüße,
Klaus M.vdT.
Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
18.08.2010 18:02:11
Maris
HI Klaus,
vielen Dank für deine Hilfe... ich habs wie folgt eingebaut:

Option Explicit
Private Sub Grouping_Click()
With Grouping
If Grouping = True Then
Range("B2:BZ2000").FormatConditions.Delete
Else
Range("B2:BZ2000").FormatConditions.Add Type:=xlExpression, Formula1:= _
"=REST(SUMMENPRODUKT(N($AA$1:$AA1$AA$2:$AA2));2)"
Range("B2:BZ2000").FormatConditions(1).Interior.ColorIndex = 34
End If
End With
End Sub
Und es funktioniert :-))))
Lediglich mein altes Problem besteht weiterhin...
Durch diese bedingt Formatierung ist meine Excelmappe extrem langsam geworden....
Ich wollte eigentlich das die Zellen eingefärbt werden nach dieser Formel und nicht mehr abhängig von der Formatierung sind. Die einfärbung soll durch erneutes drücken wieder Rückgängig gemahct werden...
Ist das in dieser Form machbar?
Gruß
Maris
Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
19.08.2010 10:17:52
Klaus
Hallo Maris,
klar, du könntest per VBA einfärben. Pseudocode:
IF ToggleButton THEN
FOR jedeZelle IN Bereich
IF Bedingung THEN Farbe
NEXT
ELSE
Bereich.keineFarbe
END IF
Die Frage ist, wie du die Bedingung ( "=REST(SUMMENPRODUKT(N($AA$1:$AA1$AA$2:$AA2));2)" ) nach VBA übersetzt. Ich würd das per ausgeblendeter Hilfsspalte lösen, das scheint mir am einfachsten.
Kannst ja die Summenprodukt-Formel per VBA eintragen, danach überprüfen und dann die Spalte wieder löschen.
Grüße,
Klaus M.vdT.
Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
19.08.2010 11:26:03
Maris
Hi Klaus,
Hilfsspalte!?!? Das übersteigt leider meinen Excelhorizont im Moment... könntest du mir vielleicht genauer erkären wie das funktioniert... ich komm nimma ganz mit. Wäre sehr nett von dir.
Gruß,
Maris
AW: Bedingte Formatierung per Makro ein-/ausschalten
19.08.2010 12:23:53
Klaus
Hallo Maris,
lad mal bitte den relevanten Teil deiner Datei hoch (im xls Format).
Grüße,
Klaus M.vdT.
Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
19.08.2010 14:19:07
Klaus
Hallo Maris
der Code schreibt die Formel in Spalte L, färbt die Zeile ein und löscht die Formel danach wieder. Spalte L ist also tabu für die restliche Tabelle! Am besten ausblenden.
Wenn dein Original größer ist, kannst du die Spalte im Makro verändern (zB auf IV).
Grüße,
Klaus M.vdT.
Option Explicit
Private Sub ToggleButton1_Click()
Dim lRow As Long
Dim r As Range
ActiveCell.Activate 'Focus wiederholen (nicht notwendig)
lRow = Range("A65536").End(xlUp).Row 'Letzte Zeile
If ToggleButton1 Then
Range("L2:L" & lRow).FormulaR1C1 = "=MOD(SUMPRODUCT(N(R2C7:RC7R3C7:R[1]C7)),2)" 'Formel in  _
Spalte L schreiben
For Each r In Range("L2:L" & lRow) 'Spalte L bis zur letzten Zeile durchlaufen
If r.Value = 1 Then r.EntireRow.Interior.ColorIndex = 34 'Wenn Formel 1 ergibt, die  _
Zeile blau färben
Next r
Range("L1").EntireColumn.ClearContents 'Die Formeln in Spalte L löschen
Else
Range("L2:L" & lRow).EntireRow.Interior.ColorIndex = xlNone 'gesamten Bereich entfärben
End If
End Sub

Anzeige
AW: Bedingte Formatierung per Makro ein-/ausschalten
19.08.2010 15:21:32
Maris
hi,
leider stimmt die Formel nicht liefert falsche Werte... Sie Beispieldatei. Beim anpassen an die Origianldatei ist meine Vergleichspalte nicht G sondern Z

Range("CD2:CD" & lRow).FormulaR1C1 = "=MOD(SUMPRODUCT(N(R2C7:RC7R3C7:R[1]C7)),2)"
keine Ahnung wie ich das hier anpassen soll :-(
https://www.herber.de/bbs/user/71141.xls
Anzeige
Hilf dir selbst dann hilft dir der Makrorekorder!
19.08.2010 15:26:56
Klaus
Hallo Maris,
schreibe die original Formel in die erste Zeile der Hilfsspalte Spalte. Wirf den Makrorekorder an, clicke auf die Zeile und drücke F2 - Enter. Makrorekorder wieder aus.
Nun hast du die R1C1 Notation deiner Formel, die du im obrigen Makro austauschen kannst. Nicht vergessen, auch alle Spaltenbezeichnungen zu ändern ( Range("L2:L"&lRow) wird zB zu Range("AA2:AA2 & lRow) )
Grüße,
Klaus M.vdT.
Anzeige
AW: Hilf dir selbst dann hilft dir der Makrorekorder!
19.08.2010 16:25:42
Maris
super vielen dank! wie schaffe ich es nun das er nicht die gesamte Zelle einfärbt sondern nur den Bereich:
B bis AZ
Grüßle
Maris
AW: Hilf dir selbst dann hilft dir der Makrorekorder!
20.08.2010 10:46:44
Klaus
Hi Maris,
aus der Hüfte:
tausche die Zeile
If r.Value = 1 Then r.EntireRow.Interior.ColorIndex = 34 

gegen
If r.Value = 1 Then Range("B" & r.row & ":AZ" & r.row).Interior.ColorIndex = 34
Grüße,
Klaus M.vdT.
Anzeige
AW: Hilf dir selbst dann hilft dir der Makrorekorder!
20.08.2010 17:25:39
Maris
Danke dir :-D!!!!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Bedingte Formatierung per Makro ein-/ausschalten


Schritt-für-Schritt-Anleitung

  1. ToggleButton Einfügen: Füge einen ToggleButton in dein Excel-Arbeitsblatt ein.

  2. VBA-Editor Öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code Einfügen: Füge den folgenden Code in das Click-Ereignis deines ToggleButtons ein:

    Option Explicit
    Private Sub ToggleButton1_Click()
       Dim lRow As Long
       Dim r As Range
       lRow = Range("A65536").End(xlUp).Row 'Letzte Zeile
       If ToggleButton1 Then
           Range("B2:BZ" & lRow).FormatConditions.Delete 'Bedingte Formatierung anhalten
           Range("B2:BZ" & lRow).FormatConditions.Add Type:=xlExpression, Formula1:= _
           "=REST(SUMMENPRODUKT(N($AA$1:$AA1$AA$2:$AA2));2)"
           Range("B2:BZ" & lRow).FormatConditions(1).Interior.ColorIndex = 34
       Else
           Range("B2:BZ" & lRow).FormatConditions.Delete 'Bedingte Formatierung ausschalten
       End If
    End Sub
  4. Testen: Schließe den VBA-Editor und teste den ToggleButton in deinem Arbeitsblatt. Beim ersten Klick wird die bedingte Formatierung aktiviert, beim zweiten Klick wird sie deaktiviert.


Häufige Fehler und Lösungen

  • Excel wird langsam: Wenn du feststellst, dass dein Excel durch die bedingte Formatierung extrem langsam wird, kannst du die bedingte Formatierung anhalten, indem du die Formatierungen mit Range("B2:BZ" & lRow).FormatConditions.Delete entfernst.

  • Falsche Farbzuweisungen: Stelle sicher, dass die Farbcodes korrekt sind. Zum Beispiel, um eine Zelle blau einzufärben, verwende Interior.ColorIndex = 34.

  • Formel funktioniert nicht: Wenn die Formel nicht die erwarteten Ergebnisse liefert, überprüfe die Zellreferenzen und passe sie gegebenenfalls an.


Alternative Methoden

Eine weitere Möglichkeit, die bedingte Formatierung in Excel zu steuern, besteht darin, die Zellen direkt mit VBA einzufärben, ohne die bedingte Formatierung zu verwenden. Beispiel:

For Each r In Range("B2:BZ" & lRow)
    If r.Value = 1 Then
        r.Interior.ColorIndex = 34 ' Zelle blau färben
    Else
        r.Interior.ColorIndex = xlNone ' Zelle entfärben
    End If
Next r

Diese Methode kann die Leistung deines Arbeitsblatts verbessern, da du die bedingte Formatierung deaktivieren kannst.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du die bedingte Formatierung in Excel aktivieren und deaktivieren kannst:

  1. Daten eingeben: Füge Daten in die Zellen A2 bis BZ2000 ein.
  2. ToggleButton verwenden: Nutze den ToggleButton, um die bedingte Formatierung an- und auszuschalten. Die Zellen färben sich hellblau, wenn die Bedingung erfüllt ist.

Wenn du die bedingte Formatierung in einem größeren Bereich verwenden möchtest, passe den Bereich in deinem Code entsprechend an.


Tipps für Profis

  • Hilfsspalten verwenden: Nutze Hilfsspalten, um komplexe Berechnungen durchzuführen, ohne die Leistung deines Arbeitsblatts zu beeinträchtigen. Du kannst die Formel in eine Hilfsspalte schreiben und dann mit VBA auf die Werte zugreifen.

  • Makrorekorder nutzen: Wenn du dir unsicher bist, wie du eine Formel in R1C1-Notation umwandelst, aktiviere den Makrorekorder, führe die gewünschte Aktion aus und stoppe den Rekorder. So erhältst du den benötigten Code.


FAQ: Häufige Fragen

1. Was bedeutet "bedingte Formatierung anhalten"?
Das bedeutet, dass du die automatischen Formatierungen für bestimmte Bedingungen in Excel deaktivierst, um die Leistung zu verbessern.

2. Wie kann ich die bedingte Formatierung in Excel deaktivieren?
Du kannst die bedingte Formatierung anhalten, indem du die Formatierungsregeln mit FormatConditions.Delete löscht.

3. Was ist der Vorteil von VBA gegenüber der herkömmlichen bedingten Formatierung?
VBA ermöglicht mehr Flexibilität und Kontrolle über die Formatierungen und kann die Leistung verbessern, insbesondere bei großen Datenmengen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige