web-dev-qa-db-fra.com

Coloration de texte partiel dans une cellule dans Excel

Dans Excel, il existe plusieurs façons de colorer dynamiquement une cellule complète en fonction de sa valeur, mais existe-t-il un moyen de ne colorer dynamiquement qu'une partie de la cellule en fonction de sa valeur?

Par exemple, supposons que je construise un rapport qui ressemble à ce qui suit:

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

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

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

Ce qui est frustrant, c'est que la mise en forme personnalisée [Green]0%;[Red](-0%) fonctionne parfaitement lorsqu'elle est appliquée à la cellule entière (via la section de mise en forme du nombre personnalisé), mais lorsqu'elle est appliquée via la fonction TEXT(), elle cesse de fonctionner. Alors, comment puis-je personnaliser une valeur partielle dans une cellule?

13
Moses

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

La première approche consistait à diviser les chaînes en deux colonnes distinctes. Ainsi, je pouvais utiliser l'un des formats personnalisés décrits précédemment pour définir sa couleur. Ce n'est pas une solution idéale, car je devais faire des compromis sur l'aspect et la convivialité du rapport afin de pouvoir intégrer cette colonne supplémentaire.

La deuxième approche consiste à utiliser VBA/macros, ce que j'aurais préféré éviter dans ce scénario particulier aurait été à la hauteur de la tâche. Même si je ne vais pas imprimer tout le code de travail, cela se résume à ceci:

  1. Recherchez la cellule que vous souhaitez ajuster (via ActiveCell ou une boucle)
  2. Utilisez la fonction Instr pour trouver l'emplacement dans la chaîne où vous souhaitez modifier la couleur
  3. Si la longueur du texte est variable, utilisez à nouveau Instr pour rechercher dans la chaîne l'emplacement où vous souhaitez arrêter la couleur.
  4. Utilisez la fonction Characters(start, length) pour mettre en évidence les caractères exacts à modifier, en transmettant les valeurs trouvées précédemment.
  5. Changer la couleur avec Font.Color = RGB(r,g,b)
8
Moses

Vous trouverez un exemple d'utilisation d'une macro ici:

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

Macros Excel - Pour la partie en boucle d'une couleur à l'autre

Utilisez une macro Excel contenant une boucle for pour parcourir les lignes de données météo et colorer le texte de la cellule en rouge s'il contient le mot chaud et le bleu s'il 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 la 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
5
maverick_99

Si vous divisez la grille de la feuille Excel (largeur de la cellule) égale à un espace de caractère, vous pouvez l’utiliser de la même manière que la suivante:

Example Sheet

0
Khurrum Iqbal