Colorir texto parcial dentro da célula no Excel


13

No Excel, existem várias maneiras de colorir dinamicamente uma célula completa 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 estou criando um relatório parecido com o seguinte:

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

Nesse cenário, desejo apenas colorir os valores de porcentagem (-25%) e (+ 10%), e não os valores em dólar $ 75 e $ 55, que também estão na célula. Para aumentar 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 fica fora da tabela).

Eu tentei usar a TEXT()função interna, mas isso também não funcionou. Tentei especificamente =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")onde A1está a referência de célula para o valor em dólar e A2é a referência de célula para o delta de porcentagem.

O frustrante é que a formatação personalizada [Green]0%;[Red](-0%)funciona bem quando aplicada a toda a célula (através da seção de formatação de números personalizados), mas quando aplicada através da TEXT()função, ela pára de funcionar. Então, como posso personalizar a cor de um valor parcial dentro de uma célula?


1
As funções do Excel não conseguem, a formatação condicional se aplica apenas a células inteiras e parece que você esgotou as possibilidades com formatos de números personalizados. Pode ser possível no VBA, no entanto. (Para um exemplo simples, dê uma olhada aqui estou curioso, embora Como você está recebendo dois números em uma célula, construindo-los como cordas, talvez..?
chuff

@chuff Sim, eu estava construindo-os como strings para que eu pudesse contornar as limitações de grade do Excel (tamanho da coluna de largura fixa para cada linha).
Moisés

Respostas:


8

Descobri duas abordagens para contornar esse problema e nenhuma delas realmente ótima.

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

A segunda abordagem é através do uso de macros VBA /, que, embora eu tenha optado por evitar nesse cenário em particular, estaria à altura da tarefa. Embora eu não imprima todo o código de trabalho, ele se resume a isso:

  1. Encontre a célula que você deseja ajustar (através de ActiveCellou em um loop)
  2. Use a Instrfunçã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 sequência em que deseja interromper a cor.
  4. Use a Characters(start, length)função para destacar os caracteres exatos que você deseja modificar, transmitindo os valores encontrados anteriormente.
  5. Mude a cor com Font.Color = RGB(r,g,b)

Não tem representante suficiente para votar abaixo, mas esta seria a minha primeira: "Embora eu não imprima todo o código de funcionamento" - por que não? Bastante útil para um fórum como este.
hmedia1

5

Um exemplo usando uma macro pode ser encontrado aqui:

Macro para colorir parte do texto em células no Excel

Macros do Excel - para loop para colorir parte de células

Use uma macro do Excel que contenha um loop for para percorrer as linhas de dados climáticos e colorir parte do texto da célula em vermelho se contiver a palavra quente e azul se contiver a palavra legal:

Instruções

  1. Clique na guia Desenvolvedor no Excel
  2. Clique no ícone Visual Basic e copie o texto da macro abaixo na janela de código
  3. Clique no ícone do Excel para voltar à exibiçã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

2
O objetivo do Superusuário é criar uma base de conhecimento em vez de uma coleção de links para respostas em outros lugares. Links externos podem ser interrompidos, caso em que sua resposta não teria valor. Inclua as informações essenciais em sua resposta e use o link para atribuição e leitura adicional.
fixer1234

Esta é uma boa solução, vou implementá-la.
Htm11h

0

Uma abordagem viável, embora não seja uma solução no MS EXCEL, se você dividir a grade da planilha do Excel (largura da célula) igual a um espaço de caracteres, poderá usar a cor de sua escolha:

Folha de exemplo


0

Essa macro colorirá qualquer intervalo selecionado de texto que contenha colchetes para vermelho se o texto entre colchetes contiver um caractere "-"; caso contrário, será 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

-1

Insira uma linha sobre o texto que deseja destacar, torne a linha a largura que você precisa para iluminar, mude a cor do texto para amarelo (ou qualquer cor que você escolher) e reduza a opacidade da linha ao seu gosto.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.