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

Forumthread: Bedingte Formatierung als Makro

Bedingte Formatierung als Makro
24.07.2013 09:31:18
Thomas
Hallo zusammen,
ich brächte folgende Bedingte Formatierung als Makro.
Bedingte Formatierung:
Werte formatieren, für die diese Formel wahr ist:

=ZÄHLENWENN(A8:A240;A8)>1

Wird angewendet auf:

=$A$8:$NG$240

Formatierung: Ausfüllen mit hellgrüner Farbe
Vielen Dank!
Gruß
Thomas

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Und ich bräuchte Urlaub
24.07.2013 10:47:50
JACKD
Du kannst ja schonmal den Makrorekorder laufen lassen und wir helfen dir dann deinen Code zu optimieren.
Grüße

AW: Und ich bräuchte Urlaub
24.07.2013 11:18:42
Thomas
Hallo,
so sieht der aufgezeichnete Code aus:
Sub Makro2()
'
' Makro2 Makro
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
"=ZÄHLENWENN(A8:A240;A8)>1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.PatternColorIndex = xlAutomatic
.ThemeColor = xlThemeColorAccent2
.TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
End Sub
Nur wenn ich das Makro so laufen lasse, passiert nichts...
Gruß
Thomas

Anzeige
AW: Und ich bräuchte Urlaub
24.07.2013 13:16:40
Matze
Hallo Thomas,
warum muss das VBA sein ?
Markiere den Bereich A8:NG200 Neue Bedingung
Formel =$A8>=1 Farbe wählen FERTIG OK
So gewollt ?
Matze

AW: Und ich bräuchte Urlaub
24.07.2013 13:46:15
Thomas
Hallo Matze,
soll VBA sein, da in dem Tabellenblatt die automatische Berechnung deaktiviert ist.
Vereinfacht wäre es auch zu lösen mit Bedingter Formatierung und dein ein Makro mit "calculate" aber ist nicht die schönste Lösung.
Gruß
Thomas

Anzeige
Profi bitte drüberschauen -
24.07.2013 14:23:42
Matze
Hallo Thomas,
Vorgabe: des Tabellenblatt ist "automatische Berechnung" aus!!
..ich werde dir hier nicht weiterhelfen können und stelle nachher den Beitrag auf offen.
Das Private Sub Worksheet_Change(ByVal Target As Range) Ereignis in einer Tabelle
wäre jetzt mein Vorschlag gewesen , leider funktioniert das nicht mit der Formel Aktualisierung.
Da muesste dann ebenfalls ein Calculate mit rein. Also kannst du schon wie oben die einfache Variante nutzen.
Hier gibt's Profis, daher nun offen
Matze

Anzeige
AW: Profi bitte drüberschauen -
25.07.2013 13:01:33
fcs
Hallo Thomas,
für mich ist unklar in welchem Zellbereich jeweils peprüft werden soll ob der Zellinhalt mehr als 1-mal vorkommt.
Da scheinen mir in der Formel deiner bedingten Formatierung ein paar $-Zeichen zu fehlen.
Wenn du mit bedingter Formatierung(inkl. Formel) arbeittest und Berechnung auf manuell steht, dann muss du nur Taste F9 drücken zur Neuberechnung.
Eine Makrolösung sieht etwa wie folgt aus. Sie benötigt aber auch schon ein paar Sekunden bei der Anzahl Zellen.
Gruß
Franz
Sub Formatieren()
Dim wks As Worksheet
Dim rngZelle As Range, rngPruefen As Range, rngZaehlen As Range
Set wks = ActiveSheet
Set rngPruefen = wks.Range("A8:NG240")
Set rngZaehlen = wks.Range("A8:A240")
Application.ScreenUpdating = False
rngPruefen.Interior.ColorIndex = xlColorIndexNone 'oder andere Basisfarbe setzen
For Each rngZelle In rngPruefen
'Prüft Anzahl Zellinhalt in Spalte A
If Application.WorksheetFunction.CountIf(rngZaehlen, rngZelle.Value) > 1 Then
'Prüft Anzahl Zellinhalt in Spalte der Zelle
'If Application.WorksheetFunction.CountIf(rngZaehlen.Offset(0, _
rngZelle.Column - rngZaehlen.Column), rngZelle.Value) > 1 Then
rngZelle.Interior.Color = RGB(0, 255, 0) 'hellgrün
End If
Next
Application.ScreenUpdating = True
MsgBox "Fertig mit Formatieren"
End Sub

Anzeige
Nachfrage
24.07.2013 14:01:16
mpb
Hallo Thoams,
sollen wirklich über VBA die Zellen bedingt formatiert werden, oder reicht es, die Zellen im genannten Bereich, die die Bedingung erfüllen, hellgrün zu färben?
Gruß
Martin

Versehentlich geschlossen, nun wieder geöffnet oT
24.07.2013 14:07:06
mpb
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Bedingte Formatierung in Excel mit VBA


Schritt-für-Schritt-Anleitung

Um eine bedingte Formatierung in Excel über VBA zu erstellen, 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 mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".

  3. Füge den folgenden Code ein:

    Sub MakroBedingteFormatierung()
       Dim rngPruefen As Range
       Set rngPruefen = Range("$A$8:$NG$240")
    
       ' Alte Formatierung zurücksetzen
       rngPruefen.Interior.ColorIndex = xlColorIndexNone
    
       Dim rngZelle As Range
       For Each rngZelle In rngPruefen
           If Application.WorksheetFunction.CountIf(Range("A8:A240"), rngZelle.Value) > 1 Then
               rngZelle.Interior.Color = RGB(0, 255, 0) ' hellgrün
           End If
       Next rngZelle
    
       MsgBox "Fertig mit Formatieren"
    End Sub
  4. Führe das Makro aus: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".

Damit werden alle Zellen im Bereich $A$8:$NG$240, die die Bedingung erfüllen, in hellgrün formatiert.


Häufige Fehler und Lösungen

  1. Das Makro funktioniert nicht: Überprüfe, ob die automatische Berechnung deaktiviert ist. In diesem Fall musst du eventuell F9 drücken, um die Neuberechnung auszulösen.

  2. Falsche Zellreferenzen: Stelle sicher, dass die Zellreferenzen in der CountIf-Funktion korrekt sind. Es können $-Zeichen fehlen, die die absolute Referenzierung sicherstellen.

  3. Formatierung bleibt aus: Vergewissere dich, dass der Bereich korrekt gesetzt ist und dass die Formel in der CountIf-Funktion korrekt ist, um die Zellen zu zählen.


Alternative Methoden

Falls du keine VBA-Lösung verwenden möchtest, kannst du auch die integrierte Funktion zur bedingten Formatierung in Excel nutzen:

  1. Markiere den Bereich $A$8:$NG$240.

  2. Gehe zu "Start" > "Bedingte Formatierung" > "Neue Regel".

  3. Wähle "Formel zur Ermittlung der zu formatierenden Zellen verwenden" und gib die folgende Formel ein:

    =ZÄHLENWENN($A$8:$A$240; A8) > 1
  4. Stelle die Formatierung auf hellgrün ein und klicke auf "OK".


Praktische Beispiele

Hier sind einige Anwendungsbeispiele für die VBA bedingte Formatierung:

  • Duplikate in einer Liste hervorheben: Verwende die oben angegebene CountIf-Formel, um Zellen zu identifizieren, die mehrere Male vorkommen.

  • Dynamische Zellenformatierung: Wenn du Daten importierst und die Zellen automatisch formatieren willst, kannst du das VBA-Makro in einem Arbeitsblatt-Ereignis wie Worksheet_Change einfügen.


Tipps für Profis

  • Verwende xlThemeColorAccent2 für konsistente Farben: Bei der Verwendung von ThemeColor kannst du sicherstellen, dass die Formatierung im gesamten Workbook konsistent bleibt.

  • Setze die ScreenUpdating-Eigenschaft auf False: Dies verbessert die Leistung des Makros, insbesondere bei großen Datenmengen.

  • Teste den Code in einer Kopie deiner Datei: Um Datenverluste zu vermeiden, teste neue Makros immer in einer Sicherungskopie.


FAQ: Häufige Fragen

1. Kann ich die bedingte Formatierung auch in Excel Online verwenden?
Bedingte Formatierungen über VBA sind in Excel Online nicht verfügbar. Du kannst jedoch die standardmäßigen bedingten Formatierungsoptionen verwenden.

2. Wie kann ich die Formatierung wieder entfernen?
Du kannst das Makro anpassen, um die Formatierung zurückzusetzen, indem du Interior.ColorIndex auf xlColorIndexNone setzt, bevor du die neuen Formatierungen anwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige