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

Forumthread: Formatierung VBA, Zellen einfärben

Formatierung VBA, Zellen einfärben
21.07.2023 11:30:23
Christine
Liebe Forumsteilnehmer,
ich habe schon viel auf diesem Forum recherchiert und gelernt. Nun stehe ich vor einer Herausforderung, die ich selbst nicht lösen kann.
Ich möchte Zellen mittels VBA einfärben, wenn gewisse Bedingungen erfüllt sind, bzw. wenn sich Werte außerhalb von Bezugsgrenzen befinden.
Mit der bedingten Formatierung habe ich ausreichend Erfahrung, möchte diese aber aufgrund mehrerer Probleme nicht anwenden. Gründe sind: Dateien werden sehr langsam, wenn diese großflächig (große Dateien mit vielen Tabellenblättern; zB 10 Tabellenblätter mit 30 Spalten und 5000 Zeilen) angewendet und immer wieder „verselbstständigt“ sich eine Formatierung (zB beim Runterkopieren werden anstatt einem Bezugsbereich zwei erstellt oder Zellen werden einfach nicht formatiert, obwohl alles korrekt eingestellt ist).
Nun habe ich schon viele Codes aus dem Netz probiert und adaptiert, aber eine korrekte Einfärbung bekomme ich nicht hin.
Meine konkreten Aufgabenstellungen:
• Codes sollten alle in „Private Sub Worksheet_Change(ByVal Target As Range)“ eingefügt werden
• alle Zellen eines Arbeitsblattes werden bei Inhalt „pos“, „inf“ „x“ mit der RGB Farbe (255,114,86) eingefärbt; falls das für ein ganzes Arbeitsblatt nicht möglich ist, dann für mehrere Spalten
• einfärben von Werten in der Spalte K, die sich nicht zwischen zwei absoluten Werten in der Spalte (zB in Zelle K6 und K5) befinden.
• Einfärben von Werten in einer Spalte (L), die kleiner sind als ein absoluter Bezugswert in der gleichen Spalte zB Beispiel Wert in L8

Einer der konkreten Codes, welche ich mehrfach versucht habe anzupassen (Code funktioniert, jedoch kann ich den Range nicht erweitern):

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Zelle As Range, Bereich As Range
Set Bereich = Intersect(Target, Range("A1:A16"))
If Not Bereich Is Nothing Then
For Each Zelle In Bereich
Select Case Zelle.Offset(0, 1 - Zelle.EntireColumn.Column).Text
Case Is = "pos"
Zelle.Interior.Color = RGB (255, 114, 86)
Case Is = "inf"
Zelle.Interior.Color = RGB (255, 114, 86)

Case Is = "x"
Zelle.Interior.Color = RGB (255, 114, 86)

Case Else
Zelle.Interior.ColorIndex = xlColorIndexNone
End Select
Next Zelle
End If

End Sub



Vielen Dank für eure Hilfe im Voraus, ich würde mich sehr über eine Lösung der „Herausforderung“ freuen.
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formatierung VBA, Zellen einfärben
21.07.2023 12:31:53
GerdL
Hallo Christine,

probier mal.
Private Sub Worksheet_Change(ByVal Target As Range)


    Dim Zelle As Range, MIN As Double, LOWER As Double, UPPER As Double
    
    LOWER = Range("K5").Value
    UPPER = Range("K6").Value
    MIN = Range("L8").Value
    
    
    For Each Zelle In Target
        With Zelle
        Select Case .Text
            Case Is = "pos"
                .Interior.Color = RGB(255, 114, 86)
            Case Is = "inf"
                .Interior.Color = RGB(255, 114, 86)
            Case Is = "x"
                .Interior.Color = RGB(255, 114, 86)
            Case Else
                .Interior.ColorIndex = xlColorIndexNone
        End Select
        If .Column = 11 Then
            If Intersect(.Cells, Range("K5:K6")) Is Nothing Then
                If .Value > LOWER And .Value  UPPER Then
                   .Interior.ColorIndex = 44
                Else
                   .Interior.ColorIndex = xlColorIndexNone
                End If
        ElseIf .Column = 12 Then
               If Intersect(.Cells, Range("L8")) Is Nothing Then
                  If .Value  MIN Then
                     .Interior.ColorIndex = 5
                  Else
                   .Interior.ColorIndex = xlColorIndexNone
                  End If
              End If
        End If
    Next Zelle


End Sub
Gruß Gerd

Anzeige
AW: Formatierung VBA, Zellen einfärben
21.07.2023 12:51:48
GerdL
Über Next Zelle fehlt End With.

AW: Formatierung VBA, Zellen einfärben
21.07.2023 12:45:28
UweD
Hallo

das musst du in 3 Teilaufgaben unterbringen.
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Zelle As Range, Bereich As Range
    
    'Aufgabe1
    For Each Zelle In Target
        Select Case Zelle.Value
        Case "pos", "inf", "x"
            Zelle.Interior.Color = RGB(255, 114, 86)
        
        Case Else
            Zelle.Interior.ColorIndex = xlColorIndexNone
        End Select
    Next Zelle
    
    'Aufgabe2
    If Not Intersect(Target, Columns(11)) Is Nothing Then ' Nur Spalte K
        For Each Zelle In Target
            If Zelle.Row > 6 And IsNumeric(Zelle) Then
                If Abs(Zelle) >= Range("K5") And Abs(Zelle) = Range("K6") Then
                    Zelle.Interior.Color = RGB(255, 114, 86)
                Else
                    Zelle.Interior.ColorIndex = xlColorIndexNone
                End If
            End If
        
        Next

    End If

    'Aufgabe3
    If Not Intersect(Target, Columns(12)) Is Nothing Then ' Nur Spalte L
        For Each Zelle In Target
            If Zelle.Row > 8 And IsNumeric(Zelle) Then
                If Abs(Zelle)  Range("L8") Then
                    Zelle.Interior.Color = RGB(255, 114, 86)
                Else
                    Zelle.Interior.ColorIndex = xlColorIndexNone
                End If
            End If
        
        Next

    End If

End Sub
LG UweD

Anzeige
AW: Formatierung VBA, Zellen einfärben
08.08.2023 19:23:49
Hallo,
der Code zum Einfärben aller Zellen im Blatt bei bestimmten Fällen ( Code unterbei) den ich erhalten habe funktioniert super! Ein kleines, für mich unlösbares Detail habe ich noch zu klären.
Wenn die drei beschriebenen Fälle nicht eintreten, sollte die Zelle nicht farblos werden sondern einfach die ursprüngliche Farbe beibehalten; also überhaupt nicht formatiert werden. Was kann ich anstatt dem "Zelle.Interior.ColorIndex = xlColorIndexNone" als Case else einfügen?
Danke vorab!


Private Sub Worksheet_Change(ByVal Target As Range)

Dim Zelle As Range, Bereich As Range

For Each Zelle In Target
Select Case Zelle.Value
Case "pos", "inf", "x"
Zelle.Interior.Color = RGB(255, 114, 86)

Case Else
Zelle.Interior.ColorIndex = xlColorIndexNone
End Select
Next Zelle
Anzeige
AW: Formatierung VBA, Zellen einfärben
08.08.2023 20:46:25
daniel
nix,
diese Zeile einfach weglassen.
das "Case Else" muss natürlich bleiben.

Select Case Zelle.Value

Case "pos", "inf", "x"
Zelle.Interior.Color = RGB(255, 114, 86)
Case Else
End Select

gruß Daniel
AW: Formatierung VBA, Zellen einfärben
21.07.2023 13:07:38
Daniel
Hi
wenn das ganze auf jedem Tabellenblatt laufen soll, dann kannst du das Makro auch im Modul DieseArbeitsmappe als
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
erstellen. Dann musst du es nur einmal schreiben und es gilt für jedes Tabellenblatt der Mappe.

Wie du die einzelnen Aufgaben dann abarbeitest, haben die Kollegen schon gezeigt.

Beachte, dass das Change-Event nur dann reagiert, wenn der Anwender in einer Zelle einen Wert oder die Formel selbst von Hand ändert.
Ergibt sich in einer bestehenden Formel aufgrund einer Neuberechnung ein anderes Ergebnis, so wird diese Zelle nicht im Target von Change aufgeführt.

Gruß Daniel

Anzeige
AW: Formatierung VBA, Zellen einfärben
21.07.2023 18:23:05
Christine
Wow, ihr seid ein Wahnsinn! Vielen herzlichen Dank für die Codes und eure Mühe!!!! Ich habe schon mehr als 20 Stunden in die "Formatierung" investiert und es leider nicht hinbekommen. Bin übers Wochenende nicht am Arbeitsplatz, werde aber den ganzen Montag in dieses Projekt investieren und eine Antwort geben, ob es funktioniert hat. Bin schon sehr gespannt.
Ein schönes Wochenende euch & danke vorab nochmals!

Anzeige
AW: Formatierung VBA, Zellen einfärben
24.07.2023 18:22:52
Christine
Hallo,
habe heute die Codes ausprobiert und hab mich sehr gefreut, Aufgabe 1 und 3 sind perfekt gelöst; tun ohne weitere Anpassung was sie sollten.
Bei der Aufgabe 2 funktioniert die "Formatierung" leider noch nicht, habe beide Varianten ausprobiert. Egal welchen wert ich eingebe, es färbt sich nichts.
In Zelle K6 steht zb der Wert 6,65 und in Zelle K5 der Wert 6,85. Eingegebene Werte in der betreffenden Spalte sollten ab K10 eingefärbt werden, wenn sie
entweder
zwischen 0,01 und K6 ist oder K6
oder
zwischen K5 und zB 100 oder >K5.
Habt ihr noch einen Tip für mich?
Danke vorab!
Anzeige
AW: Formatierung VBA, Zellen einfärben
24.07.2023 18:36:06
daniel
es wäre gut, wenn du deine Programmierung zeigen könntest.
denn nur wenn du uns zeigst was du gemacht hast, können wir dir auch sagen, was daran falsch ist.
noch besser ist es, eine Datei hochzuladen die die Daten und den VBA-Code enthält. Denn die korrekte Funktion ergibt sich immer aus dem zusammenspiel aus Daten und Code, und die Fehlerursache liegt nicht immer im Code allein.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zellen mit VBA einfärben: So geht's!


Schritt-für-Schritt-Anleitung

Um Zellen in Excel mittels VBA einzufärben, wenn bestimmte Bedingungen erfüllt sind, folge diesen Schritten:

  1. Öffne den VBA-Editor:

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

    • Klicke mit der rechten Maustaste auf „VBAProject (deine Arbeitsmappe)“, wähle Einfügen und dann Modul.
  3. Gib den VBA-Code ein:

    • Füge den folgenden Code in das Modul ein:
    Private Sub Worksheet_Change(ByVal Target As Range)
       Dim Zelle As Range
       Dim LOWER As Double
       Dim UPPER As Double
    
       LOWER = Range("K5").Value
       UPPER = Range("K6").Value
    
       For Each Zelle In Target
           Select Case Zelle.Value
               Case "pos", "inf", "x"
                   Zelle.Interior.Color = RGB(255, 114, 86)
               Case Else
                   Zelle.Interior.ColorIndex = xlColorIndexNone
           End Select
    
           If Zelle.Column = 11 Then ' Spalte K
               If Zelle.Value < LOWER Or Zelle.Value > UPPER Then
                   Zelle.Interior.ColorIndex = 44 ' Eine andere Farbe
               End If
           End If
    
           If Zelle.Column = 12 Then ' Spalte L
               If Zelle.Value < Range("L8").Value Then
                   Zelle.Interior.ColorIndex = 5 ' Eine andere Farbe
               End If
           End If
       Next Zelle
    End Sub
  4. Speichere die Datei:

    • Speichere die Datei als Makro-fähige Arbeitsmappe (*.xlsm).
  5. Teste den Code:

    • Ändere die Werte in den Zellen der Spalten K und L und beobachte, wie sich die Farben entsprechend der Bedingungen ändern.

Häufige Fehler und Lösungen

  • Problem: Zellen färben sich nicht.

    • Lösung: Stelle sicher, dass du den Code im richtigen Arbeitsblatt-Modul eingefügt hast. Verwende den Worksheet_Change-Ereignis-Handler.
  • Problem: Zellen färben sich nicht korrekt, wenn die Bedingungen erfüllt sind.

    • Lösung: Überprüfe die Bedingungen im Select Case-Block und stelle sicher, dass die Zellwerte die erwarteten Bedingungen erfüllen.
  • Problem: Die Formatierung wird nicht zurückgesetzt.

    • Lösung: Anstelle von Zelle.Interior.ColorIndex = xlColorIndexNone, lasse diese Zeile einfach weg, um die ursprüngliche Farbe beizubehalten.

Alternative Methoden

Wenn du eine weniger komplexe Lösung suchst, kannst du auch die bedingte Formatierung verwenden. Diese funktioniert zwar nicht immer so flüssig bei großen Datenmengen, kann jedoch in kleineren Tabellen eine einfache Möglichkeit sein, Zellen je nach Wert einzufärben. Hier ist, wie es geht:

  1. Wähle die Zellen aus, die du formatieren möchtest.
  2. Klicke auf Start > Bedingte Formatierung > Neue Regel.
  3. Wähle Formel zur Ermittlung der zu formatierenden Zellen verwenden und gib deine Bedingungen ein.
  4. Wähle die gewünschte Formatierung aus.

Praktische Beispiele

Hier sind einige praktische Beispiele, wie du VBA verwenden kannst, um deine Zellen basierend auf Bedingungen einzufärben:

  • Beispiel für das Einfärben einer ganzen Spalte:

    If Not Intersect(Target, Columns(1)) Is Nothing Then
      For Each Zelle In Target
          If Zelle.Value < 10 Then
              Zelle.Interior.Color = RGB(255, 0, 0) ' Rot
          End If
      Next Zelle
    End If
  • Beispiel für das Einfärben von Zellen je nach Wert:

    If Zelle.Value > 100 Then
      Zelle.Interior.Color = RGB(0, 255, 0) ' Grün
    End If

Tipps für Profis

  • Nutze With-Anweisungen, um den Code lesbarer zu machen:

    With Zelle
      .Interior.Color = RGB(255, 114, 86)
    End With
  • Vermeide unnötige Berechnungen durch das Setzen von Bedingungen in einer einzigen Schleife.

  • Überlege, ob du das Makro in DieseArbeitsmappe einfügen möchtest, damit es auf jeder Seite funktioniert.


FAQ: Häufige Fragen

1. Wie kann ich die Hintergrundfarbe einer Zelle ändern? Um die Hintergrundfarbe einer Zelle zu ändern, verwende den Befehl Zelle.Interior.Color = RGB(r, g, b).

2. Was mache ich, wenn die Zellenfarbe nicht zurückgesetzt wird? Lasse die Zeile Zelle.Interior.ColorIndex = xlColorIndexNone weg, um die ursprüngliche Farbe beizubehalten.

3. Kann ich das VBA-Skript in allen Arbeitsblättern verwenden? Ja, du kannst das Skript im Modul DieseArbeitsmappe erstellen, um es auf allen Arbeitsblättern anzuwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige