Colorer du texte partiel dans une cellule dans Excel


13

Dans Excel, il existe plusieurs façons de colorer dynamiquement une cellule entière en fonction de sa valeur, mais existe-t-il un moyen de colorer dynamiquement uniquement une partie de la cellule en fonction de sa valeur?

Par exemple, supposons que je crée un rapport qui ressemble à ceci:

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

Dans ce scénario, je souhaite uniquement colorer les valeurs en pourcentage (-25%) et (+ 10%), pas les valeurs en dollars 75 $ et 55 $ qui sont également dans la cellule. Ajoutant au problème, la coloration doit être dynamique (verte pour les valeurs positives, rouge pour les valeurs négatives), et ces cellules sont des références (donc la coloration manuelle est hors du tableau).

J'ai essayé d'utiliser la TEXT()fonction intégrée, mais cela n'a pas fonctionné non plus. Plus précisément, j'ai essayé =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")où se A1trouve la référence de cellule au montant en dollars et A2la référence de cellule au pourcentage delta.

Ce qui est frustrant, c'est que le formatage personnalisé [Green]0%;[Red](-0%)fonctionne très bien lorsqu'il est appliqué à la cellule entière (via la section de formatage numérique personnalisé), mais lorsqu'il est appliqué via la TEXT()fonction, il cesse de fonctionner. Alors, comment puis-je personnaliser la couleur d'une valeur partielle dans une cellule?


1
Les fonctions Excel ne peuvent pas le faire, la mise en forme conditionnelle s'applique uniquement aux cellules entières, et il semble que vous ayez épuisé les possibilités avec les formats de nombres personnalisés. Cela pourrait être faisable dans VBA, cependant. (Pour un exemple simple, jetez un œil ici . Je suis curieux, cependant. Comment obtenez-vous deux nombres dans une cellule, en les construisant peut-être en chaînes?
Chuff

@chuff Oui, je les construisais sous forme de chaînes afin de pouvoir contourner les limites de la grille d'Excel (taille de colonne à largeur fixe pour chaque ligne).
Moses

Réponses:


8

J'ai découvert deux approches pour contourner ce problème, et aucune n'était vraiment optimale.

La première approche consistait à diviser les chaînes en deux colonnes distinctes, de cette façon, je pouvais utiliser l'une des mises en forme personnalisées décrites précédemment pour définir sa couleur. Ce n'est pas une solution idéale parce que j'ai dû faire un compromis sur le "look and feel" du rapport afin de tenir compte de cette colonne supplémentaire.

La deuxième approche consiste à utiliser VBA / macros, qui, bien que j'aie choisi d'éviter dans ce scénario particulier, aurait été à la hauteur. Bien que je n'imprime pas tout le code de travail, il se résume à ceci:

  1. Trouvez la cellule que vous souhaitez ajuster (à travers ActiveCellou en boucle)
  2. Utilisez la Instrfonction pour trouver l'emplacement dans la chaîne où vous souhaitez modifier la couleur
  3. Si la longueur du texte est variable, utilisez à Instrnouveau pour trouver l'emplacement dans la chaîne où vous souhaitez arrêter la couleur
  4. Utilisez la Characters(start, length)fonction pour mettre en surbrillance les caractères exacts que vous souhaitez modifier, en transmettant les valeurs trouvées précédemment.
  5. Changez la couleur avec Font.Color = RGB(r,g,b)

1
Je n'ai pas assez de représentants pour voter, mais cela aurait été mon premier: "Bien que je n'imprime pas tout le code de travail" - pourquoi pas? Très utile pour un forum comme celui-ci.
hmedia1

5

Un exemple utilisant une macro peut être trouvé ici:

Macro pour colorer une partie du texte dans les cellules dans Excel

Macros Excel - Pour que la boucle colore une partie des cellules

Utilisez une macro Excel qui contient une boucle for pour parcourir les lignes de données météorologiques et colorer une partie du texte de la cellule en rouge si elle contient le mot chaud et en bleu si elle contient le mot cool:

Instructions

  1. Cliquez sur l'onglet Développeur dans Excel
  2. Cliquez sur l'icône Visual Basic et copiez le texte de la macro ci-dessous dans 1la fenêtre de code
  3. Cliquez sur l'icône Excel pour revenir à la vue Excel
  4. Cliquez sur l'icône Macros, sélectionnez la macro appelée TextPartColourMacro et cliquez sur exécuter

La macro terminée:

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
Le but du superutilisateur est de créer une base de connaissances plutôt qu'une collection de liens vers des réponses ailleurs. Les liens externes peuvent se rompre, auquel cas votre réponse n'aurait aucune valeur. Veuillez inclure les informations essentielles dans votre réponse et utiliser le lien d'attribution et de lecture supplémentaire.
fixer1234

C'est une bonne solution, je vais la déployer.
htm11h

0

Une approche réalisable bien que ce ne soit pas une solution dans MS EXCEL si vous divisez la grille de feuille Excel (largeur de cellule) égale à un espace de caractères, vous pouvez alors l'utiliser de la couleur de votre choix:

Exemple de feuille


0

Cette macro colorera toute plage de texte sélectionnée contenant des crochets en rouge si le texte entre les crochets contient un caractère "-", sinon il sera coloré en vert. Tout le texte en dehors des crochets reste inchangé.

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

Insérez une ligne sur le texte à mettre en surbrillance, rendez la ligne aussi large que nécessaire pour un éclairage élevé, changez la couleur du texte en jaune (ou toute couleur que vous choisissez) et réduisez l'opacité de la ligne à votre convenance.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.