Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Zellenfarbe über Funktion änderbar?





Frage

Hallo, ich führe innerhalb einer Funktion eine Berechung in Abhängikeit von 2 anderen Feldern durch. In Abhängigkeit des Ergebnisses will ich dann die Zelle, in welcher ich die Funktion aufgerufen habe einfärben, d.h. z.B.; A1: 2 B1: 3 C1: =berechne(A1; B1) => Wenn Ergebnis z.B. <10 dann Zellenfarbe C1 "grün" sonst "rot" Die Berechnung ist kein Problem, nur das automatische Einfärben in der Funktion geht nicht. Wer hat eine Idee? PS: Ich benötge diese Funktion in vielen Zellen auf vielen verschiedenen Tabellenblättern __bestehender__ Excelfiles. Daher wollte ich mir den Weg über eine bedingte Formatierung ersparen und diese Funktionalität direkt in eine entsprechende Funktion packen (Berechnung und Einfärbung).

Antwort 1 von hg

Hallo,
sollte über |Bedingte Formatierung| gehen.
Cursor in Zelle C1
Format | Bedingte Formatierung
Bedingung 1: Zellwert ist => <10 Format|Muster
Farbe auswählen
Hinzufügen:
Bedingen 2: Zellwert ist => >10 Format|Muster
Farbe auswählen.

MfG
hg

Antwort 2 von coros

Moin an alle!

@hg: Sei mir nicht böse, aber frankw hatte doch geschrieben, dass er eine Lösung ohnebedingte Formatierung haben möchte. Daher gehe ich mal davon aus, dass er die Funktion der bedingten Formatierung kennt.

@frankw: Du solltest eventuell noch mal genauer Erlären, ob es sich immer um die Zelle C1 in den verschiedenen Tabellenblättern handelt, oder ob es sich um mehrere Zellen handelt, z.B. C1 F1 I1 usw. und dann vor allem um welche. Als Vorschlag hätte ich da folgenden VBA Code anzubieten.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

If Range("C1") < 10 Then                  'Wenn der Wert in Zelle C1
                                          'kleiner der Zahl 10 dann ...
      Range("C1").Interior.ColorIndex = 4 ' Färbe die Zelle C1 grün ...
      Else                                'sonst ...
      Range("C1").Interior.ColorIndex = 3 'Färbe die Zelle C1 rot
End If                                    'Ende der If Anweisung

If Range("F1") < 10 Then                  'Wenn der Wert in Zelle F1
                                          'kleiner der Zahl 10 dann ...
      Range("F1").Interior.ColorIndex = 4 ' Färbe die Zelle F1 grün ...
      Else                                'sonst ...
      Range("F1").Interior.ColorIndex = 3 'Färbe die Zelle F1 rot
End If                                    'Ende der If Anweisung
End Sub


Diesen Code kopierst Du in das VBA Projekt Deiner Datei in "DieseArbeitsmappe". Somit wird der Code in jedem Tabellenblatt in Deiner Datei ausgeführt.
Der VBA Code macht folgendes: Bei jedem neuen Eintrag in der Zelle werden die Zellen C1 und F1 nach ihrem Wert überprüft. Ist dieser Wert in den Zellen C1 oder F1 kleiner der Zahl 10, wird die entsprechende Zelle grün gefärbt. Wird der Wert größer der zahl 10, erfolgt eine rote Färbung. Wenn es eine andere Farbe zur Färbung der Zellhintergründe sein sollen, dann müssen in den Zeilen

Range("C1").Interior.ColorIndex = 4

und

Range("C1").Interior.ColorIndex = 3

die Zahlen geändert werden. Diese Zahlen sind die Farbcode. Um diese Zahlen herauszubekommen, kopiere folgendes Makro in ein Standardmodul und führe es in einem seperatem Tabellenblöatt aus.

Sub Farbauswahl()
  Dim x As Byte
  For x = 1 To 56
    If x < 29 Then
      Cells(x, 1) = x
      Cells(x, 3) = x
      Cells(x, 4) = x
      Cells(x, 2).Interior.ColorIndex = x
      Cells(x, 3).Font.ColorIndex = x
      Cells(x, 4).Font.ColorIndex = x
    Else
      Cells(x - 28, 6) = x
      Cells(x - 28, 8) = x
      Cells(x - 28, 9) = x
      Cells(x - 28, 7).Interior.ColorIndex = x
      Cells(x - 28, 8).Font.ColorIndex = x
      Cells(x - 28, 9).Font.ColorIndex = x
    End If
  Next x
End Sub

Wenn es noch mehr Zellen nach der selben Bedingung eingefärbt werden sollen, kopiere eine komplette If Anweisung, beginnt bei If .... und endet bei End If, und füge sie vor dem Text End Sub wieder ein. Ändere dann noch die Zellbezeichnungen.

Da ich nicht weiß, ob Du Dich auch nicht mit VBA (Visual Basic) auskennst, kommt hier eine kurze Anweisung, wie Du den Code in Deine Tabelle bekommst.

1. Markiere die Anweisung aus diesem Beitrag und Kopiere (Strg c) diese.

2. Klicke in Deiner Exceldatei in der Menüleiste nacheinander auf Extras => Makro => Visual Basic Editor oder drücke die Tastenkombination Alt F11

3. In dem neu geöffneten Fenster suche auf der linken Seite nach dem Eintrag VBA Projekt(Hier der Name Deiner Tabelle)

4. Klicke danach auf den Eintrag Diese Arbeitsmappe

5. Füge nun die vorher kopierte Anweisung in das rechte leere Fenster ein.

Du solltest zum Abschluss noch die Sicherheitseinstellung, die beim Öffnen der Datei abgefragt wird, kontrollieren. Klicke dazu nacheinander in der Menüleiste wieder auf Extras => Makro und dann auf Sicherheit.... Gehe, falls nicht schon angezeigt, auf die Registerkarte Sicherheitsstufe und schaue dort nach, ob die Einstellung Mittel aktiviert ist. Wenn nicht, aktiviere diese Einstellung, da sonst der Code nicht ausgeführt werden kann. Beim nächsten Öffnen Deiner Datei kommt eine Abfrage, ob Makros aktiviert oder deaktiviert werden sollen. Klicke auf aktivieren und der Code wird ausgeführt.

Ich hoffe, Du kommst klar und bist jetzt nicht erschlafft nach soviel lesen. ;-))
Wenn Du Fragen haben solltest, melde Dich.

MfG,
coros
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 3 von nighty

hi alle

und wie immer :) KLASSE von coros :)

gruss nighty

Antwort 4 von nighty

hi alle :)

dann haett ich auch noch eines

gruss nighty

einzufuegen unter alt f11/projektexplorer/arbeitsmappe alternativ tabelle

With Worksheet
On Error GoTo fehler
Application.EnableEvents = False

rem hier deine bedingung

If Target.Value >= 10 Then
Cells(Target.Row, Target.Column).Interior.ColorIndex = 3
Else
Cells(Target.Row, Target.Column).Interior.ColorIndex = 10
End If
fehler:
Application.EnableEvents = True
End With
End Sub


Antwort 5 von nighty

hi alle :)
hi alle

ups fehle ein stueck :)

gruss nighty

Private Sub worksheet_Change(ByVal Target As Range)
With Worksheet
On Error GoTo fehler
Application.EnableEvents = False
If Target.Value >= 10 Then
Cells(Target.Row, Target.Column).Interior.ColorIndex = 3
Else
Cells(Target.Row, Target.Column).Interior.ColorIndex = 10
End If
fehler:
Application.EnableEvents = True
End With
End Sub


Antwort 6 von nighty

hi alle :)

oder RGB :)

gruss nighty

Private Sub worksheet_Change(ByVal Target As Range)
With Worksheet
On Error GoTo fehler
Application.EnableEvents = False
If Target.Value >= 10 Then
Cells(Target.Row, Target.Column).Interior.Color = RGB(255, 255, 0)
Else
Cells(Target.Row, Target.Column).Interior.Color = RGB(255, 0, 0)
End If
fehler:
Application.EnableEvents = True
End With
End Sub


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: