Colorir texto parcial dentro da célula no Excel

Colorir texto parcial dentro da célula no Excel

No Excel, existem várias maneiras de colorir dinamicamente uma célula inteira com base em seu valor, mas existe alguma maneira de colorir dinamicamente apenas parte da célula com base em seu valor?

Por exemplo, digamos que eu esteja criando um relatório parecido com o seguinte:

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

Neste cenário desejo apenas colorir os valores percentuais (-25%) e (+10%), não os valores em dólares $75 e $55 que também estão na célula. Para agravar o problema, a coloração deve ser dinâmica (verde para valores positivos, vermelho para valores negativos) e essas células são referências (portanto, a coloração manual está fora de questão).

Tentei usar a TEXT()função integrada, mas também não funcionou. Especificamente, tentei =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")onde A1está a referência da célula ao valor em dólares e A2a referência da célula ao delta percentual.

O frustrante é que a formatação personalizada [Green]0%;[Red](-0%)funciona bem quando aplicada à célula inteira (por meio da seção de formatação de número personalizada), mas quando aplicada por meio da TEXT()função ela para de funcionar. Então, como posso personalizar a cor de um valor parcial dentro de uma célula?

Responder1

Descobri duas abordagens para contornar esse problema, e nenhuma delas foi realmente ideal.

A primeira abordagem foi dividir as strings em duas colunas separadas, dessa forma eu poderia usar uma das formatações personalizadas descritas anteriormente para definir sua cor. Esta não é uma solução ideal porque tive que comprometer a "aparência" do relatório para acomodar aquela coluna extra.

A segunda abordagem é através do uso de VBA/macros, que embora eu tenha optado por evitar neste cenário específico, estaria à altura da tarefa. Embora eu não imprima todo o código de trabalho, o essencial se resume a isto:

  1. Encontre a célula que deseja ajustar (através ActiveCellou em loop)
  2. Use Instra função para encontrar o local na string onde você deseja modificar a cor
  3. Se o comprimento do texto for variável, use Instrnovamente para encontrar o local na string onde deseja interromper a cor
  4. Use a Characters(start, length)função para destacar os caracteres exatos que você deseja modificar, passando os valores encontrados anteriormente.
  5. Mude a cor comFont.Color = RGB(r,g,b)

Responder2

Um exemplo usando uma macro pode ser encontrado aqui:

Macro para colorir parte do texto nas células do Excel

Macros do Excel - For Loop para colorir parte das células

Use uma macro do Excel que contenha um loop for para percorrer as linhas de dados meteorológicos e colorir parte do texto da célula em vermelho se contiver a palavra Quente e em azul se contiver a palavra Legal:

Observe que Hot e Cool diferenciam maiúsculas de minúsculas para Instr.

Instruções

  1. Clique na guia Desenvolvedor no Excel
  2. Clique no ícone do Visual Basic e copie o texto da macro abaixo na janela de código
  3. Clique no ícone do Excel para voltar à visualização do Excel
  4. Clique no ícone Macros, selecione a macro chamada TextPartColourMacro e clique em executar

A macro concluída:

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

Responder3

Esta macro irá colorir qualquer intervalo selecionado de texto contendo colchetes para vermelho se o texto entre colchetes contiver um caractere "-", caso contrário, irá colori-lo de verde. Todo o texto fora dos colchetes permanece inalterado.

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

informação relacionada