Есть ли способ использовать формулу в качестве формата ячейки?

AFAIK, условное форматирование позволяет применять только статический формат, основанный на некоторых условиях. Я хочу, чтобы сам формат был динамичным. Например, я хочу, чтобы цвет ячейки соответствовал ее содержанию (если значение ячейки "красный", тогда используйте красный в качестве цвета), без установки правила условного форматирования для каждого цвета.

Я знаю, что это можно сделать с помощью макроса, но я не хочу запускать макрос после каждого изменения ячейки.

3 ответа3

3

Я не верю, что есть формула для этого, и нет опции в менеджере условного форматирования.

Вы можете, однако, использовать VBA. Вот небольшая функция, чтобы вы начали:

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

'Do nothing if more than one cell is updated, or if cell contents are deleted
If Target.Cells.Count > 1 Or IsEmpty(Target) Then
    Exit Sub
End If

Select Case LCase(Target.Value)
    Case "red"
        newcolor = RGB(255, 0, 0)
    Case "blue"
        newcolor = RGB(0, 0, 255)
    Case "chartreuse"
        newcolor = RGB(0, 255, 0)
    Case "lavender"
        newcolor = RGB(224, 176, 255)
    Case Else
        newcolor = Target.Interior.Color
End Select

Target.Interior.Color = newcolor
Application.EnableEvents = True

End Sub

Использовать:

  1. Нажмите Alt + F11.
  2. В Project Explorer (левая панель) дважды щелкните лист, для которого вы хотите применить форматирование.
  3. Вставьте код в окно.

Подпрограмма будет автоматически выполнена:

  • Когда вы набираете "красный", "синий", «зеленовато-голубой» или "лавандовый" выше в любой ячейке на этом конкретном листе
  • Когда формула в любой ячейке возвращает либо "красный", "синий", «зеленовато-желтый» или "лавандовый"

Вам не нужно вручную запускать функцию, когда нужно покрасить ячейки.

Вы также можете ограничить количество ячеек, в которых эта функция будет "работать", изменив условие в блоке IF. Например, чтобы закрасить ячейки только в столбце C , вы можете заменить приведенный выше блок IF на ff:

If Target.Cells.Count > 1 Or Target.Column <> 3 Then
    Exit Sub
End If

Конечно, вы должны сохранить свою книгу как документ с поддержкой макросов.

2

Насколько я знаю, если не добавить условный формат для каждого цвета, вы не можете сделать это без макроса. С другой стороны, это не займет много времени, чтобы сделать один для каждого цвета, который вы используете, я бы сказал, 5-минутный процесс.

2

Я согласен с другим постером в том, что, скорее всего, вам придется использовать макрос. Вам не придется каждый раз запускать макрос вручную, так как вы можете назначить его событию SheetChange .

Нажмите на папку « Microsoft Excel Objects » вашего VBA Project в VBE, затем дважды щелкните ThisWorkbook чтобы создать заглушку кода. Выберите « Worksheet с левой стороны, а затем выберите « SheetChange с правой стороны.

Бывает, что пример, который я связал, использует это событие для управления цветом ячейки (вам нужно обновить код, чтобы использовать строку "red" , "green" , "blue" вместо оператора case с числовые значения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .