Kolorowanie częściowego tekstu w komórce w programie Excel

13

W programie Excel istnieje kilka sposobów dynamicznego pokolorowania pełnej komórki na podstawie jej wartości, ale czy istnieje sposób dynamicznego pokolorowania tylko części komórki na podstawie jej wartości?

Załóżmy na przykład, że tworzę raport, który wygląda mniej więcej tak:

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

W tym scenariuszu chcę pokolorować tylko wartości procentowe (-25%) i (+ 10%), a nie wartości dolara 75 USD i 55 USD, które również znajdują się w komórce. Dodatkowym problemem jest to, że kolorowanie powinno być dynamiczne (zielony dla wartości dodatnich, czerwony dla wartości ujemnych), a te komórki są odniesieniami (więc ręczne kolorowanie jest poza tabelą).

Próbowałem użyć wbudowanej TEXT()funkcji, ale to też nie działało. W szczególności próbowałem =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")gdzie A1jest odwołanie do komórki do kwoty w dolarach i A2odwołanie do komórki do procentowej delty.

Frustrujące jest to, że niestandardowe formatowanie [Green]0%;[Red](-0%)działa dobrze po zastosowaniu do całej komórki (za pośrednictwem sekcji niestandardowego formatowania liczb), ale po zastosowaniu TEXT()funkcji przestaje działać. Jak mogę niestandardowo pokolorować wartość częściową w komórce?

Mojżesz
źródło
1
Funkcje programu Excel nie mogą tego zrobić, formatowanie warunkowe dotyczy tylko całych komórek i wygląda na to, że wyczerpałeś możliwości niestandardowych formatów liczb. Jednak może być wykonalne w VBA. (Dla prostego przykładu, spójrz tutaj . Jestem jednak ciekawy. Jak otrzymujesz dwie liczby w jednej komórce, być może budując je jako ciągi znaków?
chuff
@chuff Tak, budowałem je jako ciągi, aby ominąć ograniczenia siatki Excela (stała szerokość kolumny dla każdego wiersza).
Mojżesz

Odpowiedzi:

8

Odkryłem dwa podejścia do obejścia tego problemu i żadne z nich nie było naprawdę optymalne.

Pierwszym podejściem było podzielenie ciągów na dwie osobne kolumny, w ten sposób mogłem użyć jednego z wcześniej opisanych niestandardowych formatowań, aby ustawić jego kolor. To nie jest idealne rozwiązanie, ponieważ musiałem pójść na kompromis w sprawie „wyglądu i sposobu działania” raportu, aby uwzględnić tę dodatkową kolumnę.

Drugie podejście polega na użyciu VBA / makr, które, choć zdecydowałem się unikać w tym konkretnym scenariuszu, byłyby wystarczające. Chociaż nie wydrukuję całego działającego kodu, najważniejsze jest sprowadzenie się do tego:

  1. Znajdź komórkę, którą chcesz dostosować (przez ActiveCelllub za pomocą pętli)
  2. Użyj Instrfunkcji, aby znaleźć lokalizację w ciągu, w której chcesz zmodyfikować kolor
  3. Jeśli długość tekstu jest zmienna, użyj Instrponownie, aby znaleźć miejsce w ciągu, w którym chcesz zatrzymać kolor
  4. Użyj Characters(start, length)funkcji, aby podświetlić dokładne znaki, które chcesz zmodyfikować, przekazując wartości znalezione wcześniej.
  5. Zmień kolor za pomocą Font.Color = RGB(r,g,b)
Mojżesz
źródło
1
Nie mam wystarczającej liczby przedstawicieli, aby zagłosować, ale byłby to mój pierwszy: „Chociaż nie wydrukuję całego działającego kodu” - dlaczego nie? Całkiem pomocne na takim forum.
hmedia1
5

Przykład użycia makra można znaleźć tutaj:

Makro, aby pokolorować część tekstu w komórkach w Excelu

Makra Excel - do zapętlania i kolorowania części komórek

Użyj makra Excel, które zawiera pętlę for, aby przewijać wiersze danych pogodowych i kolorować część tekstu komórki na czerwono, jeśli zawiera słowo gorące i niebieskie, jeśli zawiera słowo fajne:

Instrukcje

  1. Kliknij kartę Deweloper w programie Excel
  2. Kliknij ikonę Visual Basic i skopiuj poniższy tekst makra do 1 okna kodu
  3. Kliknij ikonę Excela, aby wrócić do widoku Excela
  4. Kliknij ikonę Makra, wybierz makro o nazwie TextPartColourMacro i kliknij uruchom

Ukończone makro:

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
maverick_99
źródło
2
Celem Superużytkownika jest zbudowanie bazy wiedzy zamiast zbioru linków do odpowiedzi w innych miejscach. Linki zewnętrzne mogą się zepsuć, w takim przypadku odpowiedź nie miałaby żadnej wartości. Podaj niezbędne informacje w swojej odpowiedzi i użyj linku do przypisania i dalszego czytania.
fixer1234
To dobre rozwiązanie, będę je wdrażał.
htm11h
0

To makro pokoloruje wybrany zakres tekstu zawierającego nawiasy na czerwony, jeśli tekst w nawiasach zawiera znak „-”, w przeciwnym razie pokoloruje go na zielono. Cały tekst poza nawiasami pozostaje niezmieniony.

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
tmag
źródło
-1

Wstaw tekst nad tekstem, który chcesz wyróżnić, ustaw szerokość tak szeroką, jak potrzebujesz, aby ją wyróżnić, zmień kolor tekstu na żółty (lub dowolny wybrany kolor) i zmniejsz krycie linii do własnych upodobań.

znak
źródło
-1

Jedno wykonalne podejście, choć nie jest rozwiązaniem w MS EXCEL, jeśli podzielisz siatkę arkusza programu Excel (szerokość komórki) równą przestrzeni znaków, możesz użyć jej w wybranym kolorze:

Przykładowy arkusz

Khurrum Iqbal
źródło