Excel - Zellen mit VBA färben

XMeaningx

Lieutenant
Registriert
Juli 2008
Beiträge
766
Hallo Zusammen,
ich habe folgendes Problem:
Ich möchte Zellen bedingt durch deren Inhalt einfärben
z.B
spec.jpg

Zum einen habe ich meinen Sollwert gegeben sowie deren positive/negative Abweichungen, nun sollen die Zellen mit den Werten (Mittlerwert, Min oder Max) entsprechen eingefärbt werden
Grün = Eingabewert <= Sollwert +/- 40 % jeweilige Toleranz
Gelb = Eingabewert > Sollwert +/- 40 % jeweilige Toleranz < Sollwert +/- 100% Toleranz
Rot = Eingabewert > Sollwert +/- 100% Toleranz
Grau bei keiner Eingabe eines Werts

Diese werden immer wie im Beispiel gezeigt angeordnet sein, jedoch sind manchmal Leer Zeilen bzw. Textzeilen vorhanden in welchen das "Makro" nicht gelten soll, bzw. würde ich gerne wie Zellen auswählen können in welchen das Makro gilt.

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim bereich, zelle As Range
Set bereich = Range("M8:M9")
For Each zelle In bereich

Select Case Target.Value
    Case 3
      Target.Interior.ColorIndex = 3
    Case "I8"
      Target.Interior.ColorIndex = 4
    Case 6
      Target.Interior.ColorIndex = 6
    Case Else
      Target.Interior.ColorIndex = 1
  End Select
Next
End Sub
' 3 = Rot, 4 = Grün, 6 = Gelb

Soweit hätte ich mal einen Code geschrieben jedoch kann ich immer nur nach Fest vorgeben bei welchen Zahlen er welche Farbe nimmt
Ich hoffe ihr könnt mir hier weiter helfen

Danke schon mal
 
naja, musst du ja nicht unbedingt über vba machen, geht auch über bedingte formatierung, wenn du weißt, dass die werte in ner bestimmten range auftreten.
 
Geht das nicht mit der bedingten Formatierung in Excel?
 
Ich habe leider keine Möglichkeit Gefunden da ich ja 4 Farben benötige und Mehrere Kriterien, aber ich lasse mich gerne eines Besseren belehren
 
ok, bei mehreren kriterien gleichzeitig wird das schwierig. die farben kannst du ja manuell definieren
 
Wenn du in der Bed.Form. Bedingungen mit UND verknüpfst sollte das funktionieren.
demnach musst du pro Farbe eine Abfrage erstellen. Wenn alle Bedingungen wahr sind wird diese Zelle formatiert (Farbe o.ä.)

Letzten Endes ist das immer wieder eine Abfrage auf Wahr / Falsch --> siehe Boolsche Logik
 
Mein Problem ist die VBA Sparche/nomenklatur , z.B hab ich leider keine Ahung was du mit "Bed.Form." meinst
Von der Logik her sollte dieser Code stimmen.

Code:
IF "D4" <= "A4"+(0.5*"B4") and  "D4" >= "A4"-(0.5*"C4")
    THEN 
    Target.Interior.ColorIndex = 4
    'Grün

ELSIF "D4" <= "A4"+"B4" and  "D4" >= "A4"-"C4"
    THEN 
    Target.Interior.ColorIndex = 6
    'Gelb
ELSIF  "D4" > "A4"+"B4" or  "D4" < "A4"-"C4"
    THEN 
    Target.Interior.ColorIndex = 3
    'Rot
ELSIF
    THEN 
    Target.Interior.ColorIndex = 1
    'Rot Schwarz
ENDIF

Ein weiters Problem wäre das dieser Code nur für eine Zelle ist und ich ihn nicht ohne VBA einfach auf andere Zellen ausweiten kann
 
XMeaningx schrieb:
Mein Problem ist die VBA Sparche/nomenklatur , z.B hab ich leider keine Ahung was du mit "Bed.Form." meinst

"Bedingte Formatierung" (Excel Boardmittel) -- zu finden unter Formatvorlagen

XMeaningx schrieb:
Ein weiters Problem wäre das dieser Code nur für eine Zelle ist und ich ihn nicht ohne VBA einfach auf andere Zellen ausweiten kann

Deinen Code in zwei ineinander verschachtelte Schleifen packen und alle Zellen Spalten für Spalte und Zeile für Zeile durgehen.
 
Zuletzt bearbeitet:
@XMeaningx
Du solltest wenn schon bei SELECT-CASE bleiben statt dieser völlig unübersichtlichen ELSEIF-Ketten.
«Case 5 to 9» entspricht «If X >= 5 And X <= 9», und Case kann noch mehr.

da ich ja 4 Farben benötige
Welches Office ist da im Spiel? Nur aus Neugier gefragt.
Wenn du eine ›neutrale‹ Zelle mit 4 Farben färben willst hast du bei 3 Bedingten Formatierungen verloren. Dein erstes Beispiel aber (→ Case Else) zeigt (offenbar sind recht oft aller guten Dinge 3…) mir, dass du nur 3 Verfräbungen der ›neutralen Farbe‹ gegenüber brauchst. Und damit kommst du gerade so noch mit der Bedingten Formatierung hin.

Z.B.: Zelle leer = nichts [oder eine andere Färbung..!] • kleiner Null = rot • ist Null = gelb • größer Null = grün. Das sind 4 Zustände - mit nur 3 Bedingten Formatierungen.

CN8
 
@XMeaningx
Welches Office ist da im Spiel?
2010
Wenn du eine ›neutrale‹ Zelle mit 4 Farben färben willst hast du bei 3 Bedingten Formatierungen verloren. Dein erstes Beispiel aber (→ Case Else) zeigt (offenbar sind recht oft aller guten Dinge 3…) mir, dass du nur 3 Verfräbungen der ›neutralen Farbe‹ gegenüber brauchst. Und damit kommst du gerade so noch mit der Bedingten Formatierung hin.

Z.B.: Zelle leer = nichts [oder eine andere Färbung..!] • kleiner Null = rot • ist Null = gelb • größer Null = grün. Das sind 4 Zustände - mit nur 3 Bedingten Formatierungen.

Das ist eine Möglichkeit nur wie kann ich da bitte eine oder Bedingung einbauen ?
 
2010… Das müsste doch auch mehr denn drei Stufen der Bedingten Formatierung können - außer es geht um Abwärtskompatibilität. Du kannst problemlos Regel um Regel definieren und den Zellen zuweisen.

Ich sehe aus deinem Code, dass du in der Tat nur 3 Bedingungen hast, also hast du den Zustand «Nichts» der mit genau 3 Bedingten Formatierungen verändert wird.

Wo genau soll es da denn klemmen?
(Mein Rat: zu bunt taugt nicht! Setze das mit Bedacht ein.)

CN8
 
Zuletzt bearbeitet:
Wenn du noch nie mit der Bedingten Formatierung gearbeitet hast folgender Hinweis:

Diese Funktion prüft ob wahr oder falsch. (als Vergleich) also immer nur den ersten Zweig der WENN-Funktion. Aus diesem Grund kannst du auch das WENN weglassen und gleich etwas schreiben wie

Code:
=UND(A1<B1+B1*40%;A1>B1-B1*40%)
 
Zuletzt bearbeitet:
FERTIG. Folgender Code funktioniert...
Sollwert wird in Spalte H festgelegt.
Tolleranz wird in Spalte I festgelegt.

Code:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)

Dim bereich, zelle As Range
Set bereich = Range("M8:M9")
Dim Sollwert As Double  ''Zweistellige nach Komma Variable
Dim TolleranzGrün As Double
Dim TolleranzGelb As Double
For Each zelle In bereich
If zelle = "" Then zelle.Interior.ColorIndex = 15: GoTo weiter  ''leere Zelle grau färben
Sollwert = ActiveSheet.Cells(zelle.Row, 8)      ''Sollwert auslesen in Spalte H bzw. spaltenr. 8
TolleranzGrün = (ActiveSheet.Cells(zelle.Row, 9) * 0.4)    ''+-Tolleranz auslesen in Spalte I bzw. Spaltenr. 9
TolleranzGelb = ActiveSheet.Cells(zelle.Row, 9)    ''+-Tolleranz auslesen in Spalte I bzw. Spaltenr. 9
    zelle.Interior.ColorIndex = 3 ''rot
    If zelle.Text < (Sollwert + TolleranzGelb + 0.01) And zelle.Text > (Sollwert - TolleranzGelb - 0.01) Then zelle.Interior.ColorIndex = 6 'gelb
    If zelle.Text < (Sollwert + TolleranzGrün + 0.01) And zelle.Text > (Sollwert - TolleranzGrün - 0.01) Then zelle.Interior.ColorIndex = 4 'grün
weiter:
Next

End Sub

Set bereich = Range("M8:M9") kann man auch erweitern, z.B. Range("M8:K9")
 
Zurück
Oben