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

"X" in Zelle wenn Schriftfarbe rot

Forumthread: "X" in Zelle wenn Schriftfarbe rot

"X" in Zelle wenn Schriftfarbe rot
03.02.2023 20:17:26
Max
Liebes Forum,
ich verzweifel grade an einer für Euch sicher lösbaren Aufgabe:
Ich möchte in Zelle A5 ein "X" setzen, wenn in Zellen A1 bis A4 einmal die Schriftfarbe rot auftaucht.
Ansonsten soll A5 leer bleiben.
Ihr würdet mir super helfen!!!
Herzlichen Dank und schönes Wochenende!!!
Anzeige

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
03.02.2023 20:23:36
SF
Hola,
wird A1:A4 über die bedingte Formatierung gefärbt? Wenn nein, kann man das anhand einer Logik evtl darüber machen? Oder ist das völlig willkürlich?
Gruß,
steve1da
AW: "X" in Zelle wenn Schriftfarbe rot
03.02.2023 20:27:56
Max
@steve1da
Rot wird willkürlich eingetragen. Der Benutzer möchte in einer simplen Liste damit Veränderungen anzeigen. Also keine bed. Formatierung.
Ich probiere mit einer Formel aus dem Forum für Zelle A5: "=WENN(A1:A4=@Schriftfarbe=3;"X";"")" oder so ähnlich aber das funktioniert bisher nicht.
Vielen Dank für deine Antwort!!! :)
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
03.02.2023 21:42:53
onur
Dumme Frage: Ist die rote Schriftfarbe nicht auffälig genug? Wozu noch das "X"? Für Farbenblinde? Der Bereich A1:A4 ist doch auf einen Blick überblickbar.
AW: "X" in Zelle wenn Schriftfarbe rot
03.02.2023 21:55:55
Max
Gibt doch keine dummen Fragen :)
Die Liste A1:A5 ist seeehr lang und ich möchte am Ende eine Zeile die ein x anzeigt, sollte in den Zellen vorher ein Wort in rot sein.
Damit könnte ich dann die Spalte mit den x-en filtern nur zeile mit x anzuzeigen.
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
03.02.2023 22:29:02
onur
"Damit könnte ich dann die Spalte mit den x-en filtern nur zeile mit x anzuzeigen. " Dann siehst du aber nix mit rot, da du das "X" in A5 machen willst, wenn DARÜBER etwas rot ist.
Entweder dein Beispiel mit A1:A5 ist extrem blöd oder wir reden aneinander vorbei.
AW: "X" in Zelle wenn Schriftfarbe rot
04.02.2023 16:38:35
Yal
Hallo Joseph,
die grösste Schwierigkeit ist, dass rot nicht unbedingt gleich rot. Beim meinem Test ist rot 255. Ein leicht anderes rot wäre aber 13311. Wenn auch andere Farben mitmischen, wird es erst lustig.
Folgende Code ist ein User Defined Function. Es wird in ein allg. Modul abgelegt und im Blatt als Formel verwendet.
Public Function Farbe(ByVal Target As Range, Optional InfoTyp As String)
Dim i
Dim min%, max%
Dim tmp As Long
Dim Liste As Object
    min = -1
    max = -1
    Set Target = Target.Cells(1) 'falls mehrere Zelle, nur die erste
    Set Liste = craeteobject("scripting.dictionary")
    For i = i To Len(Target.Text)
        tmp = Target.Characters(i, 1).Font.Color
        If tmp > 0 Then If min = -1 Or tmp  min Then min = temp 'kleinsten non-Null. Null=Schwarz
        If max = -1 Or tmp > max Then max = temp
        Liste(tmp) = Liste(tmp) + 1
    Next
    Select Case LCase(InfoTyp)
    Case "min": Farbe = min
    Case "max": Farbe = max
    Case "beide": Farbe = min & ";" & max
    Case "gleich": Farbe = (min = max)
    Case "liste", ""
        tmp = ""
        For Each i In Liste.Keys
            tmp = tmp & "," & i & ":" & Liste(i)
        Next
        Farbe = Mid(tmp, 2) 'ohne führende ","
    End Select
End Function

Die Aufruf lautet
=Farbe(A1;"min") 'die kleinste Farbwert. Schwarz ist 0 und wird gar nicht aufgelistet. Wenn alles schwarz kommt -1 raus.
=Farbe(A1;"max") 'die höchste Farbwert
=Farbe(A1;"gleich") 'ob alle dieselbe Farbe
oder
=Farbe(A1;"liste") 'alle Farbe + Anzahl an Zeichen in jeder Farbe
Somit kannst Du sehen, ob Zeichen in eine andere Farbe als schwarz vorliegen.
Ob die Farbe dann rot ist, war das eigentlich Grund, warum diese Frage interessant sein kann. Nach verschiedenen Ansätze komme ich ungefährt auf einen Ermittlung durch "Abstand": in wie weit ist die Farbe vom rot (RGB 255-0-0) entfernt, und wo ist die Grenze des "nicht mehr rot genug".
Function IstEsRot(ByVal Farbe As Long) As Boolean
Dim R&, G&, B&, RG#, RB# '& long, # Double
Const cGrenze = 80
'Teilung in Rot-Grün-Blau
    R = Farbe And 255
    G = (Farbe \ 256) And 255
    B = (Farbe \ 65536) And 255
'Berechnung der Abstände
    RG = Sqr((255 - R) ^ 2 + G ^ 2) 'Radius Rot-Grün
    RB = Sqr((255 - R) ^ 2 + (2 * B) ^ 2)  'Radius Rot-Blau, Blauwert gedoppelt, weil Blau nicht so stark zieht wie Grün
'Rot oder nicht, je nach Grenzensetzung
    IstEsRot = RG  cGrenze And RB  cGrenze
End Function
Man kann auch schon aus den Farben den RGB rechnen und sagen: erst wenn R > 200, ist es rot genug.
Dafür einen Test. Man kann an der "Grenze" ausprobieren:
Sub Test()
Dim i, z, Arr
Dim Farbe As Long
Const cRotGrenze = 200
    Randomize
    With ThisWorkbook.Worksheets.Add
        z = 1
        For i = 1 To 200
            Arr = Array(WorksheetFunction.RandBetween(0, 255), WorksheetFunction.RandBetween(0, 255), WorksheetFunction.RandBetween(0, 255))
            Farbe = RGB(Arr(0), Ar(1), Arr(2))
            If SplitRGB(Farbe)(0) > cRotGrenze Then
                z = z + 1
                .Cells(z, 1).Interior.Color = Farbe
                .Cells(z, 2).Resize(1, 3) = Arr
            End If
        Next
    End With
End Sub
Endlich mal was ausserhalb von "Daten von A nach B kopieren". Hat spass gemacht.
VG
Yal
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
05.02.2023 10:47:31
Max
@Yal: Vielen Dank dir für deine Mühe. Freut mich sehr, dass es dir Spass gemacht hat! :)
Ich habe allerdings wirklich nur rot. Ich versuche die Aufgabe nochmal zu stellen, etwas abgeändert:
Spalten A bis E haben Einträge, meistens schwarz, nur einige in rot (Standard Rot).
Nach jeder Zeile soll in Spalte F geprüft werden, ob sich in den 5 Zellen links davon eine rote Standard Farbe befindet. Sollte das der Fall sein, möchte ich ein "X" erscheinen lassen, ansonsten soll F leer bleiben. Im Nachhinein möchte ich Spalte F filtern können auf X'e, damit mir nur Zeilen mit roter Farbe angezeigt werden.
Sorry, dass es da bisher Unklarheiten gab.
Ein schönes Wochenende!
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
05.02.2023 11:58:11
Yal
Hallo Max,
dann wesentlich einfacher:
Public Function HatRot(ByVal Target As Range) As Boolean
Dim i, Z As Range
    For Each Z In Target.Cells
        For i = 1 To Len(Target.Text)
            If Target.Characters(i, 1).Font.Color = 255 Then
                HatRot = True
                Exit Function 
            End If
        Next
    Next
End Function
Wie vorher, UDF, also als Formel zu verwenden. Kann auch mehrere Zelle ("A1:A5") als Parameter aufnehmen, steigt aber beim ersten rot aus (Optimierung der Berechnungszeit).
VG
Yal
Anzeige
AW: "X" in Zelle wenn Schriftfarbe rot
05.02.2023 23:35:12
Max
Danke dir nochmal Yal! :)
Und was muss ich dann als Formel eingeben? In F1 sowas wie : =WENN(@HatRot(A1:E1);"X";"") ?
Sorry ich taste mich grade langsam ran an das Wunderwerk Excel!
Genau, aber ohne @ owT
05.02.2023 23:49:32
Yal
(owT steht für "ohne weitere Text")
AW: Genau, aber ohne @ owT
05.02.2023 23:56:50
Max
https://www.herber.de/bbs/user/157658.xlsm
Yal, abermals vielen Dank für deine schnelle Antwort.
Sorry, dass es noch nicht klappt, sei bitte gnädig :)
Ich hab mal eine Datei angehängt.
Anzeige
AW: Genau, aber ohne @ owT
06.02.2023 09:11:50
Yal
Hallo Max,
sorry, ich habe gestern den Code am Handy aus dem original auf das wesentlichen reduziert und dann die mehrzellige Fähigkeit eingebaut. Dabei zwei Fehler reingebaut.
Hier der richtigen Code. Nach dem "For Each Z" muss man natürlich Z als Einzelzelle verwenden und nicht Target (mehrzellig)
Public Function HatRot(ByVal Target As Range) As Boolean
Dim i, Z As Range
  
      For Each Z In Target.Cells
          For i = 1 To Len(Z.Text)
              If Z.Characters(i, 1).Font.Color = 255 Then
                  HatRot = True
                  Exit Function
              End If
          Next
      Next
End Function
Es ist keine Matrixformel. Einfach zuerst mit =HatRot(A1:B1) testen (aber der Wenn ist ja nicht störend).
VG
Yal
Anzeige
AW: Genau, aber ohne @ owT
07.02.2023 13:18:32
Max
Habemus X :D
Yal vielen lieben Dank dir für deine Arbeit! Großartig!!!
na dann: gaudium magnum
07.02.2023 13:44:34
Yal
owT
Anzeige
Anzeige

Infobox / Tutorial

"X" in Zelle setzen, wenn Schriftfarbe rot ist


Schritt-für-Schritt-Anleitung

Um in Excel ein "X" in Zelle F1 zu setzen, wenn in den Zellen A1 bis E1 mindestens ein Text in roter Schriftfarbe steht, kannst Du eine benutzerdefinierte Funktion (User Defined Function, UDF) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne den Visual Basic for Applications (VBA) Editor:

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

    • Klicke im Menü auf Einfügen und wähle Modul.
  3. Füge den folgenden VBA-Code ein:

    Public Function HatRot(ByVal Target As Range) As Boolean
       Dim i, Z As Range
       For Each Z In Target.Cells
           For i = 1 To Len(Z.Text)
               If Z.Characters(i, 1).Font.Color = 255 Then
                   HatRot = True
                   Exit Function
               End If
           Next
       Next
    End Function
  4. Verwende die Funktion in Excel:

    • Gehe zurück zu Deinem Arbeitsblatt und gebe in die Zelle F1 die folgende Formel ein:
      =WENN(HatRot(A1:E1); "X"; "")

      Diese Formel prüft, ob in den Zellen A1 bis E1 eine rote Schriftfarbe vorhanden ist und zeigt in F1 ein "X", falls dies der Fall ist.


Häufige Fehler und Lösungen

  • Fehler bei der Verwendung von Schriftfarbe: Stelle sicher, dass Du die korrekte RGB-Farbe für Rot verwendest. Im VBA-Code wird Rot als 255 definiert.

  • Formel funktioniert nicht: Überprüfe, ob die UDF korrekt im Modul eingefügt wurde und dass Du die Formel ohne das @-Zeichen verwendest.

  • Leere Zelle in F1: Wenn in A1 bis E1 keine rote Schriftfarbe vorhanden ist, bleibt F1 leer, was dem gewünschten Verhalten entspricht.


Alternative Methoden

Falls Du keine VBA-Lösung verwenden möchtest, kannst Du auch die bedingte Formatierung in Excel nutzen, um Zellen zu färben, aber ein "X" anzuzeigen ist nur mit VBA möglich. Eine Alternative wäre, die Zellen manuell zu überprüfen oder eine andere Farbe zu verwenden, um die Sichtbarkeit zu erhöhen.


Praktische Beispiele

  1. Einfaches Beispiel:

    • Wenn in A1 der Text "Test" in roter Farbe steht, wird in F1 ein "X" angezeigt.
  2. Erweiterte Anwendung:

    • Du kannst die Formel in F1 nach unten ziehen, um die Überprüfung für mehrere Zeilen (z.B. F2 für A2:E2) durchzuführen.

Tipps für Profis

  • Optimierung: Wenn Du große Datenmengen hast, die geprüft werden müssen, kannst Du die UDF optimieren, indem Du die Schleifen und Bedingungen anpasst, um die Performance zu verbessern.

  • Farbwerte anpassen: Wenn Du mit verschiedenen Rottönen arbeitest, kannst Du den VBA-Code so anpassen, dass er auch andere Farbwerte akzeptiert, um flexibler beim Erkennen von Rot zu sein.


FAQ: Häufige Fragen

1. Funktioniert dieser Code in allen Excel-Versionen?
Ja, der VBA-Code funktioniert in den meisten modernen Excel-Versionen, die VBA unterstützen.

2. Was, wenn ich mehrere Farben prüfen möchte?
Du kannst die Funktion erweitern, um mehrere Farbwerte zu akzeptieren, indem Du zusätzliche Bedingungen im VBA-Code hinzufügst.

3. Kann ich die Funktion auch für andere Schriftfarben verwenden?
Ja, Du kannst die Farbwerte im Code anpassen, um andere Schriftfarben zu überprüfen, indem Du die RGB-Werte entsprechend änderst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige