Teiltext innerhalb der Zelle in Excel einfärben


12

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, das eingebaute zu verwenden TEXT() Funktion, aber das hat auch nicht funktioniert. Konkret habe ich es versucht =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)") woher A1 ist der Zellbezug zum Dollarbetrag und A2 ist die Zellreferenz auf das prozentuale Delta.

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


1
Excel-Funktionen können das nicht, die bedingte Formatierung gilt nur für ganze Zellen, und es scheint, als hätten Sie die Möglichkeiten mit benutzerdefinierten Zahlenformaten ausgeschöpft. Möglicherweise ist dies jedoch in VBA möglich. (Für ein einfaches Beispiel werfen Sie einen Blick Hier . Ich bin allerdings neugierig. Wie bekommt man zwei Zahlen in eine Zelle und baut sie vielleicht als Zeichenketten auf?
chuff

@chuff Ja, ich habe sie als Zeichenfolgen aufgebaut, damit ich die Rastergrenzen von Excel umgehen kann (Spaltengröße mit fester Breite für jede Zeile).
Moses

Antworten:


7

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. Benutzen Instr 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 Instr erneut, um die Stelle in der Zeichenfolge zu finden, an der Sie die Farbe anhalten möchten
  4. Verwenden Sie die Characters(start, length) Funktion zum Hervorheben der genauen Zeichen, die Sie ändern möchten, wobei die zuvor gefundenen Werte übergeben werden.
  5. Ändern Sie die Farbe mit Font.Color = RGB(r,g,b)

4

Ein Beispiel mit einem Makro finden Sie hier:

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

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

2
Superuser haben zum Ziel, eine Wissensdatenbank aufzubauen, anstatt eine Sammlung von Links zu Antworten an anderer Stelle. Externe Links können kaputt gehen. In diesem Fall hat Ihre Antwort keinen Wert. Bitte geben Sie die wesentlichen Informationen in Ihrer Antwort an und verwenden Sie den Link zur Namensnennung und weiteren Lektüre.
fixer1234

Dies ist eine gute Lösung, ich werde es bereitstellen.
htm11h

-1

Fügen Sie eine Linie über dem Text ein, der hervorgehoben werden soll, stellen Sie die gewünschte Breite ein, ändern Sie die Textfarbe in Gelb (oder eine beliebige andere Farbe) und reduzieren Sie die Deckkraft der Linie nach Ihren Wünschen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.