Hintergrundfarbe abfragen

Kann ich bei MS Excel die hintergrundfarbe einer Zelle fragen?
ala WENN(zellenhintergrund=12;5;10)

Danke

Nein, aber (nicht so tolle) Makro-Alternative

Kann ich bei MS Excel die hintergrundfarbe einer Zelle fragen?
ala WENN(zellenhintergrund=12;5;10)

Moin Trempf,

also eine Excel-interne Formel kenne ich nicht (das heißt aber nicht, daß es sie nicht gibt). Spontan fällt mir nur eine benutzerdefinierte Funktion ein, die dann allerdings mit Makro funktioniert, das entweder in einem Modul innerhalb der Datei stecken muß (Nachteil: Makro-Sicherheitsabfrage beim Öffnen) oder in einer *.xla-Datei (Nachteil: *.xla muß beim Verschicken der Datei dazugepackt werden).

Aufgefallen ist mir allerdings, daß es mit dem Ausführen der Funktion hapert, wenn kein direkter Bezug auf eine Zelle besteht, deren Wert sich ändert. Auch F9 half (meist) nix, sondern nur F2 und Enter in der Zelle, in der die Formel steht.

Abhilfe kann man notfalls schaffen, indem man eine Zufallszahl als Parameter übergibt, der bestimmt, ob man Schrift- oder Zellenfarbe haben will (siehe ganz unten).

Ich schreibe hier mal zwei Varianten des Makros hin:

Option Explicit
Option Base 1
 
Function Zellfarbe(strZelle\_ As String, Optional booSchriftfarbe\_ As Boolean) As Long
' Erfordert als Argument z.B. "D6", also einen String.
' Vorteil: Ist schön kurz und kompakt.
' Nachteil: Kann nicht unbedingt "runtergezogen" (nach unten ausgefüllt) werden.
 If booSchriftfarbe\_ Then
 Zellfarbe = Range(strZelle\_).Interior.ColorIndex 'Schriftfarbe
 Else
 Zellfarbe = Range(strZelle\_).Interior.Color 'Hintegrundfarbe
 End If 'booSchriftfarbe\_
End Function 'Zellfarbe
 
 
Function Zellfarbe2(intY\_ As Integer, intX\_ As Integer, Optional booSchriftfarbe\_ As Boolean) As Long
' Erfordert als Argumente z.B. 6 und 4 also zwei Zahlen.
' Vorteil: Kann meist "runtergezogen" (nach unten ausgefüllt) werden.
' Nachteil: Ist nicht so schön kompakt.
 If booSchriftfarbe\_ Then
 Zellfarbe2 = Cells(intY\_, intX\_).Interior.ColorIndex 'Schriftfarbe
 Else
 Zellfarbe2 = Cells(intY\_, intX\_).Interior.Color 'Hintegrundfarbe
 End If 'booSchriftfarbe\_
 'MsgBox Cells(intY\_, intX\_).Value
End Function 'Zellfarbe2

Zum Testen hatte ich folgendes in den Zellen stehen:
D6: Irgendwas mit bestimmter Schrift- und Hintergrundfarbe
E6: =Zellfarbe(„D6“;G6)
F6: =Zellfarbe(„D6“)
E7: =Zellfarbe2(ROW(D6);COLUMN(D6);G6)
F7: =Zellfarbe2(ROW(D6);COLUMN(D6))
G6: =SIGN(RAND())-1-H6
H6: 0 oder 1

Die Formeln in Spalte E enthalten den optionalen Parameter zur Farbwahl (Schrift oder Hintergrund), der wiederum in G6 erzeugt wird, wo wertmäßig immer „0-H6“ steht, da „SIGN(RAND())-1“ immer 0 ergibt. Wenn also in H6 eine 0 steht, wird die Hintergrundfarbe ausgegeben, ansonsten die Schriftfarbe.

Vorteil der Variante in Spalte E ist, daß die Werte bei jeder Änderung der Tabelle aktualisiert werden. In Spalte F ist das nicht der Fall, auch wenn als Parameter ein festes „True“ oder „False“ eingegeben wird.

Alles in allem etwas umständlich, oder? :wink:

Achso, und ich habe hier die Englische Version von Excel. Die internen Funktionen wie „SIGN“ müßten dann durch die Deutschen ersetzt werden.

Kristian