![使用单元格作为条件格式的“模板”](https://linux22.com/image/1543732/%E4%BD%BF%E7%94%A8%E5%8D%95%E5%85%83%E6%A0%BC%E4%BD%9C%E4%B8%BA%E6%9D%A1%E4%BB%B6%E6%A0%BC%E5%BC%8F%E7%9A%84%E2%80%9C%E6%A8%A1%E6%9D%BF%E2%80%9D.png)
答案1
检查这个基于 VBA 的解决方案是否适合您。它仍然在内部创建所需的相同条件格式规则,但通过 VBA 代码,它现在根据 I4 和 I5 中单元格的颜色决定颜色索引。
此示例遵循与您的问题相同的范围。范围 B4:D6 用于应用条件格式并使用 I4 和 I5 中的参考颜色。
在工作表中,假设 Sheet1 按 。VBAALT + F11
编辑器将打开。在左侧窗格中双击 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,并根据 I4 和 I5 的颜色重新创建适用于 B4:D6 的条件格式规则。
但是,在修改 I4 和/或 I5 中的背景颜色后,您需要在 C5 中重新输入值才能使此代码起作用。VBA 不提供任何背景颜色更改事件供本机捕获。但是,可以使用 VBA 代码再次捕获此类事件。