
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 A1
der Zellverweis auf den Dollarbetrag und A2
wo 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:
- Suchen Sie die Zelle, die Sie anpassen möchten (entweder durch
ActiveCell
oder eine Schleife) - Verwenden Sie
Instr
die Funktion, um die Stelle in der Zeichenfolge zu finden, an der Sie die Farbe ändern möchten - Wenn die Textlänge variabel ist, verwenden Sie
Instr
erneut, um die Stelle in der Zeichenfolge zu finden, an der Sie die Farbe stoppen möchten - Verwenden Sie die
Characters(start, length)
Funktion, um genau die Zeichen hervorzuheben, die Sie ändern möchten, und übergeben Sie die zuvor ermittelten Werte. - Ändern Sie die Farbe mit
Font.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
- Klicken Sie in Excel auf die Registerkarte Entwickler
- Klicken Sie auf das Visual Basic-Symbol und kopieren Sie den untenstehenden Makrotext in das Codefenster
- Klicken Sie auf das Excel-Symbol, um zurück zur Excel-Ansicht zu wechseln
- 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