Забарвлення часткового тексту всередині комірки в Excel


13

У Excel існує кілька способів динамічного забарвлення повної комірки на основі її значення, але чи є спосіб динамічно забарвити лише частину комірки на основі її значення?

Наприклад, скажіть, що я будую звіт, який виглядає приблизно так:

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

У цьому сценарії я хочу лише розфарбувати значення відсотків (-25%) та (+ 10%), а не значення долара 75 та 55 доларів, які також знаходяться у комірці. Додавання проблеми полягає в тому, що забарвлення має бути динамічним (зелене для позитивних, червоне для від’ємних значень), і ці клітинки є посиланнями (тому ручне фарбування не входить у таблицю).

Я спробував використовувати вбудовану TEXT()функцію, але це теж не вийшло. Зокрема, я спробував, =TEXT(A1,"$##")&" "&TEXT(A2,"[Green]0%;[Red](-0%)")де A1посилання клітини на суму долара та A2чи посилання на клітинку на відсотковий дельта.

Найспритніше полягає в тому, що користувацьке форматування [Green]0%;[Red](-0%)працює чудово, коли застосовується до всієї комірки (через розділ форматування користувальницького номера), але при застосуванні через TEXT()функцію воно припиняє роботу. Отже, як я можу настроїти кольорову часткову величину в комірці?


1
Функції Excel не можуть цього зробити, умовне форматування стосується лише цілих комірок, і це здається, що ви вичерпали можливості за допомогою спеціальних форматів чисел. Це, можливо, можливо в VBA. (Для простого прикладу, погляньте сюди . Мені цікаво. Як же ви отримуєте два числа в одній клітині, можливо, будуючи їх як рядки?
Чікайте

@chuff Так, я будував їх як рядки, щоб я міг обійти обмеження в сітці Excel (розмір стовпця з фіксованою шириною для кожного ряду).
Мойсей

Відповіді:


8

Я виявив два підходи, щоб подолати цю проблему, і ні там, де реально оптимально.

Перший підхід - це розбивання рядків на два окремі стовпці, тому я міг використовувати одне з описаних раніше спеціальних форматів, щоб встановити його колір. Це не ідеальне рішення, оскільки мені довелося піти на компроміс щодо "зовнішнього вигляду" у звіті, щоб вмістити цю додаткову колонку.

Другий підхід - через використання VBA / макросів, яких, хоч я і вирішив уникати в цьому конкретному сценарії, було б вирішено. Хоча я не буду роздруковувати весь робочий код, він істотно зводиться до цього:

  1. Знайдіть клітинку, яку ви хочете відрегулювати (через ActiveCellабо через цикл)
  2. Використовуйте Instrфункцію, щоб знайти місце в рядку, де ви бажаєте змінити колір
  3. Якщо довжина тексту є змінною, використовуйте Instrзнову, щоб знайти місце в рядку, де ви хочете зупинити колір
  4. За допомогою Characters(start, length)функції виділіть точні символи, які ви хочете змінити, передаючи значення, знайдені раніше.
  5. Змініть колір за допомогою Font.Color = RGB(r,g,b)

1
Не вистачає репортажу, але це було б моїм першим: "Поки я не роздрукую весь робочий код" - чому б і ні? Дуже корисний для форуму, як це.
hmedia1

5

Приклад використання макросу можна знайти тут:

Макрос, щоб розфарбувати частину тексту в комірки в Excel

Excel Macros - для циклу кольорової частини комірок

Використовуйте макрос Excel, який містить цикл for, щоб провести цикл через рядки даних про погоду та забарвити частину тексту клітинки в червоний колір, якщо він містить слово гаряче та синє, якщо воно містить слово cool:

Інструкції

  1. Перейдіть на вкладку Developer в Excel
  2. Клацніть піктограму Visual Basic і скопіюйте текст макросу нижче в перше вікно коду
  3. Клацніть піктограму Excel, щоб повернутися до перегляду Excel
  4. Клацніть на піктограмі Макроси, виберіть макрос під назвою TextPartColourMacro і натисніть запустити

Виконаний макрос:

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
Метою Super User є створення бази знань, а не колекція посилань на відповіді деінде. Зовнішні посилання можуть розірватися, і в цьому випадку ваша відповідь не мала б значення. Будь ласка, включіть важливу інформацію у свою відповідь та використовуйте посилання для атрибуції та подальшого читання.
fixer1234

Це хороше рішення, я буду його розгортати.
htm11h

0

Цей макрос забарвить будь-який обраний діапазон тексту, що містить дужки, в червоний колір, якщо текст у дужках містить символ "-", інакше він забарвиться в зелений колір. Весь текст поза дужками залишається незмінним.

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

Вставте рядок над текстом, який хочете виділити, зробіть лінію такою широкою, як вам потрібно, щоб було яскраве, змінити колір тексту на жовтий (або будь-який обраний вами колір) та зменшити непрозорість рядка на ваш смак.


-1

Один доцільний підхід, хоча це не рішення в MS EXCEL, якщо ви розділите сітку листа Excel (ширина комірки), рівну простору символів, тоді ви можете використовувати його на обраний вами колір:

Приклад аркуша

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.