Проверьте, подходит ли вам это решение на основе VBA. Он по-прежнему внутренне создает те же правила условного форматирования, что и требуется, но с помощью кода VBA теперь решает индекс цвета на основе цвета ячеек в I4 и I5.
Этот пример соответствует тому же диапазону, что и в вашем вопросе. Диапазон B4:D6 для применения условного форматирования и использования эталонного цвета из I4 и I5.
На вашем листе произнесите «Лист1», нажмите ALT + F11
. Редактор VBA откроется. Двойной щелчок на Sheet1 в левой панели и в правой части редактора кода выберите объект листа (первый выпадающий список), а затем изменить событие (второй выпадающий список).
В этом месте для вас будет доступна следующая подпрограмма.
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
Внутри этой подпрограммы поместите приведенный ниже код VBA.
'On WorkSheet Change Event Check for Change in C5 and that too if X or O is entered in it.
If Target.Address = "$C$5" Then
If UCase(Target) = UCase(Range("G4").Value) Or UCase(Target) = UCase(Range("G5").Value) Then
'First clear the Conditional formatting at B4:D6
Range("B4:D6").Select
Selection.FormatConditions.Delete
Range("C5").Select
'Set the conditional formatting at B4:D6
Range("B4:D6").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$5=$G$4"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.Color = Range("I4").Interior.Color
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("B4:D6").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$C$5=$G$5"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Interior
.Color = Range("I5").Interior.Color
End With
Selection.FormatConditions(1).StopIfTrue = False
Range("C5").Select
End If
End If
Сохраните и выйдите из редактора VBA. Теперь каждый раз, когда вы изменяете значение в ячейке C5, код будет проверять, является ли он C5 и введены ли в нем X или O, и воссоздает правила условного форматирования, применимые к B4:D6 на основе цвета из I4 и I5.
Однако вам нужно будет повторно ввести значение в C5, чтобы этот код работал после изменения цвета фона в I4 и / или I5. VBA не предлагает никаких событий изменения цвета фона для записи. Тем не менее, возможно, можно будет перехватывать такие события, используя код VBA.