it-swarm.com.de

Teiltext innerhalb der Zelle in Excel einfärben

In Excel gibt es verschiedene Möglichkeiten, eine vollständige Zelle basierend auf ihrem Wert dynamisch einzufärben. Gibt es jedoch eine Möglichkeit, nur einen Teil der Zelle basierend auf ihrem Wert dynamisch einzufärben?

Angenommen, ich erstelle einen Bericht, der ungefähr so ​​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. Hinzu kommt, dass die Färbung dynamisch sein sollte (grün für positive und rot für negative Werte) und dass diese Zellen Referenzen sind (sodass die manuelle Färbung von der Tabelle abweicht).

Ich habe versucht, die eingebaute Funktion TEXT() zu verwenden, aber das hat auch nicht funktioniert. Insbesondere habe ich =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)") ausprobiert, wobei A1 die Zellreferenz zum Dollarbetrag und A2 die Zellreferenz zum prozentualen Delta ist.

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

13
Moses

Es gab zwei Ansätze, mit denen ich dieses Problem umgehen konnte, und keiner war wirklich optimal.

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

Der zweite Ansatz besteht in der Verwendung von VBA/Makros, die, obwohl ich sie in diesem speziellen Szenario vermieden habe, der Aufgabe gewachsen wären. Ich werde zwar nicht den gesamten Arbeitscode ausdrucken, aber es läuft darauf hinaus:

  1. Suchen Sie die Zelle, die Sie anpassen möchten (entweder durch ActiveCell oder eine Schleife)
  2. Verwenden Sie die Funktion Instr, um die Position in der Zeichenfolge zu finden, an der Sie die Farbe ändern möchten
  3. Wenn die Textlänge variabel ist, verwenden Sie Instr erneut, um die Stelle in der Zeichenfolge zu suchen, an der Sie die Farbe anhalten möchten
  4. Verwenden Sie die Funktion Characters(start, length), um die genauen Zeichen hervorzuheben, die Sie ändern möchten, und geben Sie die zuvor gefundenen Werte ein.
  5. Ändere die Farbe mit Font.Color = RGB(r,g,b)
8
Moses

Ein Beispiel mit einem Makro finden Sie hier:

Makro zum Färben eines Teils des Texts in Excel-Zellen

Excel-Makros - Für eine Schleife zum Färben eines Teils der Zellen

Verwenden Sie ein Excel-Makro, das eine for-Schleife enthält, um Zeilen mit Wetterdaten zu durchlaufen, und färben Sie einen Teil des Zellentextes rot, wenn er das Wort hot enthält, und blau, wenn er das Wort cool enthält:

Anleitung

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

Das abgeschlossene 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
5
maverick_99

Ein praktikabler Ansatz, der jedoch in MS Excel keine Lösung darstellt: Wenn Sie das Excel-Tabellenraster (Zellenbreite) durch ein Zeichenraster teilen, können Sie es in der Farbe Ihrer Wahl verwenden:

Example Sheet

0
Khurrum Iqbal