Einfärben von Textteilen in Zellen in Excel

Einfärben von Textteilen in Zellen in Excel

In Excel gibt es mehrere Möglichkeiten, eine ganze Zelle dynamisch auf Grundlage ihres Werts einzufärben. Gibt es aber auch eine Möglichkeit, nur einen Teil der Zelle dynamisch auf Grundlage seines Werts einzufärben?

Angenommen, ich erstelle einen Bericht, der ungefähr wie folgt aussieht:

 _________________________
|       |    Dec    | Nov |
|_______|___________|_____|
|Gross R| $75 (-25%)| $100|
|_______|___________|_____|
|Net Inc| $55 (+10%)| $50 |
|_______|___________|_____|

In diesem Szenario möchte ich nur die Prozentwerte (-25 %) und (+10 %) einfärben, nicht die Dollarwerte 75 $ und 55 $, die sich ebenfalls in der Zelle befinden. Das Problem wird noch dadurch verschärft, dass die Einfärbung dynamisch sein soll (grün für positive, rot für negative Werte) und diese Zellen Referenzen sind (manuelle Einfärbung ist also nicht möglich).

Ich habe versucht, die integrierte TEXT()Funktion zu verwenden, aber das hat auch nicht funktioniert. Insbesondere habe ich versucht, =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")wo A1der Zellverweis auf den Dollarbetrag und A2wo der Zellverweis auf das prozentuale Delta ist.

Das Frustrierende ist, dass die benutzerdefinierte Formatierung [Green]0%;[Red](-0%)einwandfrei funktioniert, wenn sie auf die gesamte Zelle angewendet wird (über den Abschnitt zur benutzerdefinierten Zahlenformatierung), aber wenn sie über die TEXT()Funktion angewendet wird, funktioniert sie nicht mehr. Wie kann ich also einen Teilwert innerhalb einer Zelle benutzerdefiniert einfärben?

Antwort1

Ich habe zwei Ansätze entdeckt, um dieses Problem zu umgehen, und keiner von beiden war wirklich optimal.

Der erste Ansatz bestand darin, die Zeichenfolgen in zwei separate Spalten aufzuteilen, damit ich eine der zuvor beschriebenen benutzerdefinierten Formatierungen verwenden konnte, um die Farbe festzulegen. Dies ist keine ideale Lösung, da ich beim Erscheinungsbild des Berichts Kompromisse eingehen musste, um diese zusätzliche Spalte unterzubringen.

Der zweite Ansatz ist die Verwendung von VBA/Makros, die ich in diesem speziellen Szenario zwar vermieden habe, die Aufgabe aber durchaus lösbar gewesen wäre. Ich werde zwar nicht den gesamten funktionierenden Code ausdrucken, aber im Wesentlichen läuft es auf Folgendes hinaus:

  1. Suchen Sie die Zelle, die Sie anpassen möchten (entweder durch ActiveCelloder eine Schleife)
  2. Verwenden Sie Instrdie Funktion, um die Stelle in der Zeichenfolge zu finden, an der Sie die Farbe ändern möchten
  3. Wenn die Textlänge variabel ist, verwenden Sie Instrerneut, um die Stelle in der Zeichenfolge zu finden, an der Sie die Farbe stoppen möchten
  4. Verwenden Sie die Characters(start, length)Funktion, um genau die Zeichen hervorzuheben, die Sie ändern möchten, und übergeben Sie die zuvor ermittelten Werte.
  5. Ändern Sie die Farbe mitFont.Color = RGB(r,g,b)

Antwort2

Ein Beispiel mit einem Makro finden Sie hier:

Makro zum Einfärben eines Teils des Textes in Zellen in Excel

Excel-Makros - For-Schleife zum Einfärben von Teilen von Zellen

Verwenden Sie ein Excel-Makro mit einer For-Schleife, um die Zeilen mit Wetterdaten zu durchlaufen und einen Teil des Zellentextes rot einzufärben, wenn er das Wort „Hot“ enthält, und blau, wenn er das Wort „Cool“ enthält:

Bitte beachten Sie, dass bei Instr. zwischen Groß- und Kleinschreibung unterschieden wird.

Anweisungen

  1. Klicken Sie in Excel auf die Registerkarte Entwickler
  2. Klicken Sie auf das Visual Basic-Symbol und kopieren Sie den untenstehenden Makrotext in das Codefenster
  3. Klicken Sie auf das Excel-Symbol, um zurück zur Excel-Ansicht zu wechseln
  4. Klicken Sie auf das Makrosymbol, wählen Sie das Makro TextPartColourMacro aus und klicken Sie auf Ausführen

Das fertige Makro:

Sub TextPartColourMacro()

' Declarations and Initialisation
Dim Row As Integer, Col As Integer
Dim CurrentCellText As String
Col = 1

' Loop Through Rows 2 to 5
For Row = 2 To 5

    ' Get Text in Current Cell
    CurrentCellText = ActiveSheet.Cells(Row, Col).Value
    
    ' Get the Position of the Text Hot and Cool
    HotStartPosition = InStr(1, CurrentCellText, "Hot")
    CoolStartPosition = InStr(1, CurrentCellText, "Cool")
    
    ' Colour the Word Hot Red
    If HotStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(HotStartPosition, 3).Font.Color = RGB(255, 0, 0)
    End If
    
    ' Colour the Word Cool Blue
    If CoolStartPosition > 0 Then
        ActiveSheet.Cells(Row, Col).Characters(CoolStartPosition, 4).Font.Color = RGB(0, 0, 255)
    End If

Next Row
End Sub

Antwort3

Dieses Makro färbt jeden ausgewählten Textbereich mit Klammern rot, wenn der Text innerhalb der Klammern ein "-"-Zeichen enthält, andernfalls wird er grün gefärbt. Der gesamte Text außerhalb der Klammern bleibt unverändert.

Dim rngCell As Range
Dim CharCount As Integer
Dim BracketBegin As Integer
Dim BracketEnd As Integer
Dim strToColour As String

For Each rngCell In Selection
    CharCount = Len(rngCell)
    BracketBegin = InStr(1, rngCell, "(")
    BracketEnd = InStr(1, rngCell, ")")
    With rngCell.Characters(BracketBegin, CharCount - BracketEnd)
        ' Pull out string to check for +/-
        strToColour = rngCell.Characters(BracketBegin, CharCount - BracketEnd).Text
        ' If negative, colour red, otherwise green
        If InStr(strToColour, "-") Then
            .Font.Color = vbRed
        Else
            .Font.Color = vbGreen
        End If
  End With
Next rngCell
End Sub

[Example][1]


  [1]: https://i.stack.imgur.com/4lyN4.png

verwandte Informationen