
Есть ли способ использовать формулу в качестве формата ячейки?
AFAIK, условное форматирование допускает только статическое форматирование, применяемое на основе некоторого условия. Я хочу, чтобы сам формат был динамическим. Например, я хочу установить цвет ячейки в соответствии с ее содержимым (если значение ячейки «красный», то использовать красный цвет в качестве цвета), не устанавливая правило условного форматирования для каждого цвета.
Я знаю, что это можно сделать с помощью макроса, но я не хочу запускать макрос после каждого изменения ячейки.
решение1
Я не думаю, что для этого существует какая-то формула, и нет никакой опции в менеджере условного форматирования.
Однако вы можете использовать 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
Использовать:
- Нажмите Alt+ F11.
- В обозревателе проектов (левая панель) дважды щелкните по рабочему листу, к которому вы хотите применить форматирование.
- Вставьте код в окно.
Подпрограмма будет выполнена автоматически:
- Когда вы вводите «красный», «синий», «зеленовато-желтый» или «лавандовый» выше влюбойячейка в этом конкретном рабочем листе
- Когда формула влюбойячейка возвращает либо «красный», либо «синий», либо «зеленовато-желтый» или «лавандовый»
Вам не придется вручную запускать функцию всякий раз, когда вам нужно раскрасить какие-либо ячейки.
Вы также можете ограничить ячейки, на которых эта функция будет "работать", изменив условие в блоке IF. Например, чтобы раскрасить ячейки в столбцеСтолько вы можете изменить блок IF выше на ff:
If Target.Cells.Count > 1 Or Target.Column <> 3 Then
Exit Sub
End If
Конечно, вам придется сохранить свою рабочую книгу как документ с поддержкой макросов.
решение2
Насколько мне известно, без макроса нельзя обойтись, если не добавлять условный формат для каждого цвета. С другой стороны, создание макроса для каждого используемого цвета не должно занять много времени, я бы сказал, 5 минут.
решение3
Я согласен с другим автором в том, что вам, скорее всего, придется использовать макрос. Вам не придется запускать макрос вручную каждый раз, поскольку вы можете назначить егоЛистИзменитьсобытие.
Нажмите на Microsoft Excel Objects
папку вашего VBA Project
в VBE, затем дважды щелкните на , ThisWorkbook
чтобы сгенерировать заглушку кода. Выберите Worksheet
слева, а затем выберите SheetChange
справа.
Так уж получилось, что в примере, ссылку на который я привел, это событие используется для управления цветом ячейки (вам пришлось бы обновить код, чтобы использовать строку "red"
, "green"
, "blue"
вместо оператора case с числовыми значениями).