Colorare il testo parziale all'interno della cella in Excel


13

In Excel ci sono diversi modi per colorare dinamicamente una cella piena in base al suo valore, ma c'è un modo per colorare in modo dinamico solo una parte della cella in base al suo valore?

Ad esempio, supponiamo che stia creando un rapporto simile al seguente:

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

In questo scenario desidero solo colorare i valori percentuali (-25%) e (+ 10%), non i valori in dollari $ 75 e $ 55 che sono anche nella cella. In aggiunta al problema, la colorazione dovrebbe essere dinamica (verde per positivo, rosso per valori negativi) e queste celle sono riferimenti (quindi la colorazione manuale è fuori dal tavolo).

Ho provato a utilizzare la TEXT()funzione integrata, ma non ha funzionato neanche. In particolare ho provato =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")dov'è A1il riferimento di cella all'importo in dollari ed A2è il riferimento di cella al delta percentuale.

La cosa frustrante è che la formattazione personalizzata [Green]0%;[Red](-0%)funziona perfettamente quando viene applicata all'intera cella (tramite la sezione di formattazione dei numeri personalizzati), ma quando viene applicata tramite la TEXT()funzione smette di funzionare. Quindi, come posso personalizzare un valore parziale all'interno di una cella?


1
Le funzioni di Excel non possono farlo, la formattazione condizionale si applica solo a intere celle e sembra che tu abbia esaurito le possibilità con formati numerici personalizzati. Potrebbe essere fattibile in VBA, però. (Per un semplice esempio, dai un'occhiata qui . Sono curioso, però. Come stai ottenendo due numeri in una cella, costruendoli come stringhe, forse?
Chuff

@chuff Sì, li stavo costruendo come stringhe in modo da poter aggirare i limiti della griglia di Excel (dimensioni della colonna a larghezza fissa per ogni riga).
Mosè,

Risposte:


8

Ci sono stati due approcci che ho scoperto per aggirare questo problema, e nessuno dei due era davvero ottimale.

Il primo approccio è stato quello di spezzare le stringhe in due colonne separate, in questo modo ho potuto usare una delle formattazioni personalizzate precedentemente descritte per impostarne il colore. Questa non è una soluzione ideale perché ho dovuto scendere a compromessi sull'aspetto del rapporto al fine di accogliere quella colonna aggiuntiva.

Il secondo approccio consiste nell'utilizzare VBA / macro, che sebbene io abbia deciso di evitare in questo particolare scenario, sarebbe stato all'altezza del compito. Anche se non stamperò l'intero codice di lavoro, essenziale si riduce a questo:

  1. Trova la cella che desideri regolare (attraverso ActiveCello un ciclo)
  2. Utilizzare la Instrfunzione per trovare la posizione nella stringa in cui si desidera modificare il colore
  3. Se la lunghezza del testo è variabile, utilizzare di Instrnuovo per trovare la posizione nella stringa in cui si desidera interrompere il colore
  4. Utilizzare la Characters(start, length)funzione per evidenziare i caratteri esatti che si desidera modificare, passando i valori trovati in precedenza.
  5. Cambia il colore con Font.Color = RGB(r,g,b)

Non ho abbastanza rappresentante per il downvote, ma questo sarebbe stato il mio primo: "Mentre non stamperò l'intero codice di lavoro" - perché no? Abbastanza utile per un forum come questo.
hmedia1

5

Un esempio che utilizza una macro può essere trovato qui:

Macro per colorare parte del testo in celle in Excel

Macro di Excel: per loop per colorare parte delle celle

Utilizzare una macro di Excel che contiene un ciclo for per scorrere tra le righe di dati meteorologici e colorare in rosso la parte del testo della cella se contiene la parola hot e blue se contiene la parola cool:

Istruzioni

  1. Fai clic sulla scheda Sviluppatore in Excel
  2. Fare clic sull'icona di Visual Basic e copiare il testo macro qui sotto nella finestra del codice
  3. Fare clic sull'icona di Excel per tornare alla vista di Excel
  4. Fai clic sull'icona Macro, seleziona la macro denominata TextPartColourMacro e fai clic su Esegui

La macro completata:

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
Lo scopo di Super User è quello di costruire una base di conoscenza piuttosto che una raccolta di collegamenti a risposte altrove. I collegamenti esterni possono interrompersi, nel qual caso la tua risposta non avrebbe valore. Includere le informazioni essenziali nella risposta e utilizzare il collegamento per l'attribuzione e ulteriori letture.
fixer1234

Questa è una buona soluzione, la distribuirò.
htm11h

0

Un approccio fattibile anche se non è una soluzione in MS EXCEL se dividi la griglia del foglio Excel (larghezza della cella) uguale a uno spazio di caratteri, quindi puoi usarlo nel colore che preferisci:

Foglio di esempio


0

Questa macro colora qualsiasi intervallo di testo selezionato contenente parentesi in rosso se il testo tra parentesi contiene un carattere "-", altrimenti lo colora di verde. Tutto il testo al di fuori delle parentesi rimane invariato.

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

-1

Inserisci la linea sopra il testo che desideri evidenziare, allarga la linea di cui hai bisogno per evidenziare la luce, cambia il colore del testo in giallo (o qualsiasi colore tu scelga) e riduci l'opacità della linea a tuo piacimento.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.