Function BedingungAdd(Zellen As Range, farbe As Long) As Double
Dim Zelle As Range
Dim farben As Integer
For Each Zelle In Zellen
farben = GetCellColor(Zelle)
If farben = farbe Then
BedingungAdd = BedingungAdd + Zelle.Value
End If
Next
End Function
Function GetCellColor(cell As Range) As Integer
Dim i
Dim myVal
Dim myColor As Integer
Dim done As Boolean
On Error Resume Next
Names("testname").Delete
On Error GoTo 0
Application.ReferenceStyle = xlR1C1
myVal = cell.Value
myColor = cell.Interior.ColorIndex
done = False
For i = 1 To cell.FormatConditions.Count
With cell.FormatConditions.Item(i)
If .Type = 1 Then
Select Case .Operator
Case xlBetween
If (myVal >= Evaluate(.Formula1) And myVal <= Evaluate(.Formula2)) _
Or (myVal <= Evaluate(.Formula1) And myVal >= Evaluate(.Formula2)) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlEqual
If myVal = Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlGreater
If myVal > Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlGreaterEqual
If myVal >= Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlLess
If myVal < Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlLessEqual
If myVal <= Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlNotBetween
If myVal < Evaluate(.Formula1) Or myVal > Evaluate(.Formula2) Then
myColor = .Interior.ColorIndex
done = True
End If
Case xlNotEqual
If myVal <> Evaluate(.Formula1) Then
myColor = .Interior.ColorIndex
done = True
End If
End Select
ElseIf .Type = 2 Then
Names.Add Name:="testname", RefersToR1C1Local:=.Formula1
If Evaluate("testname") Then
myColor = .Interior.ColorIndex
done = True
End If
Names("testname").Delete
Else
MsgBox "Unbekannter Typ: " & .Type, , "PANIC: In
Function GetCellColor"
Exit Function
End If
End With
If done Then Exit For
Next
Application.ReferenceStyle = xlA1
GetCellColor = myColor
End Function
Um die Hintergrundfarbe von Zellen auszulesen, kannst du die folgende VBA-Funktion verwenden. Diese Methode ist besonders nützlich, wenn du die Farben von Zellen, die mit bedingter Formatierung formatiert sind, abfragen möchtest.
ALT + F11, um den VBA-Editor zu öffnen.Einfügen > Modul, um ein neues Modul zu erstellen.Function GetCellColor(cell As Range) As Integer
Dim myColor As Integer
myColor = cell.Interior.ColorIndex
GetCellColor = myColor
End Function
=GetCellColor(A1), um die Zellenfarbe auszulesen.Mit dieser Funktion kannst du den ColorIndex der Zelle ermitteln und anschließend bei Bedarf weiterverarbeiten.
Problem: Die Funktion gibt nicht den erwarteten Farbcode zurück.
Lösung: Stelle sicher, dass die Zelle tatsächlich eine Hintergrundfarbe hat und nicht durch bedingte Formatierung definiert ist.
Problem: Nach der Verwendung der Funktion erscheinen Fehler oder #WERT!.
Lösung: Überprüfe, ob die Zelle, die du abfragen möchtest, korrekt referenziert ist und die Zelle tatsächlich existiert.
Es gibt auch Möglichkeiten, die Farbe zu ermitteln, ohne VBA zu verwenden. Eine häufige Methode ist die Verwendung von bedingten Formeln, um den Farbcode anhand von Kriterien zu bestimmen, die du für die bedingte Formatierung festgelegt hast. Dazu kannst du die WENN-Funktion in Kombination mit dem WERT-Befehl nutzen.
Beispiel:
=WENN(A1>10; "Grün"; WENN(A1<5; "Rot"; "Gelb"))
Diese Formel gibt die Farbe basierend auf den Werten in den Zellen zurück, jedoch nicht den tatsächlichen Farbcode.
Nehmen wir an, du möchtest die Zellenfarbe auslesen und die Werte in einer separaten Tabelle auflisten. Hier ist ein Beispiel für die Verwendung der oben genannten VBA-Funktion:
GetCellColor, um in einer neuen Tabelle die Farben abzufragen.=WENN(GetCellColor(A1)=3; A1; "")
Dies gibt den Wert nur zurück, wenn die Zellenfarbe Rot ist (ColorIndex 3).
ColorIndex-Werte, um spezifische Farben effizient zu identifizieren.1. Frage
Wie kann ich die Hintergrundfarbe einer Zelle ohne VBA auslesen?
Antwort
Das direkte Auslesen der Hintergrundfarbe ohne VBA ist nicht möglich. Du kannst jedoch die Bedingungen, die zur Formatierung führen, in Formeln abfragen.
2. Frage
Gibt es eine Möglichkeit, die Schriftfarbe auszulesen?
Antwort
Ja, du kannst eine ähnliche VBA-Funktion wie GetCellColor erstellen, um die Schriftfarbe zu ermitteln, indem du cell.Font.ColorIndex verwendest.
3. Frage
Wie kann ich die Farben von Zellen mit bedingter Formatierung abfragen?
Antwort
Für Zellen mit bedingter Formatierung musst du die zugrunde liegenden Bedingungen verstehen und diese in deinen Formeln oder VBA-Funktionen berücksichtigen.