Excel – 条件格式左右梯度独立?

我正在为神奇宝贝types的Excel工作表。

表格的一部分可以让你select神奇宝贝的types。 单元格B3C3允许通过数据validation从types的下拉列表中selecttypes。 见下文。

在这里输入图像说明

还有另一部分工作表将这种types结合到一个单元格中,其公式如下(工作正常):

 = IF(OR(C3=B3,C3="(none)"),B3,B3&"/"&C3) 

在这种情况下,上面的公式会返回Grass/Poison

这一切都很好,但我想采取这个单元格,并有条件地使用双色渐变格式,以反映双重打字。

问题是,我不能找出一种方法来为每个渐变颜色有一个单独的条件格式规则。

换句话说,如果我有这两个条件格式化规则(如下所示),它将应用一个或另一个,但不是两个。

在这里输入图像说明

这个问题的一个明显的解决办法是有一个条件格式规则来处理这个特定的组合。 (见下面)尽pipe下面没有完全显示,这个规则的条件格式公式是=AND(B3="Grass",C3="Poison")

在这里输入图像说明

这个解决scheme可以工作 然而,考虑到有18个types,这意味着我将不得不为这个单元格(处理所有可能的types组合),为这个单元格18 ^ 2 = 324单独的条件格式规则,我怀疑Excel支持单个单元格的许多条件格式规则即使这样做,整合也将非常繁琐。

如果有一种方法可以让一个单元格对一个单元格应用两个渐变规则,那么规则的数量只能是18 * 2 = 36(左侧渐变为18,右侧渐变为18),这是可以pipe理的。

有谁知道如何有一个条件格式规则应用渐变颜色只有一半的单元格(并允许另一半的单元格由另一个条件格式化规则与梯度)? 这可能吗?

如何使用VBA添加条件格式? 我没有听说过或经历过最多的条件格式规则,但我并不认为是专家。

以下代码将循环显示每种types,并根据指定的颜色和types名称为渐变添加条件格式设置规则。 我现场testing了它,它对我有用。

 Sub CondForm() Dim colors() As Long ReDim colors(1 To 18) colors(1) = RGB(255, 0, 0) colors(2) = RGB(255, 255, 0) '...Add other types here colors(18) = RGB(0, 0, 255) Dim Types() As String ReDim Types(1 To 18) Types(1) = "Fire" Types(2) = "Thunder" '...Add other types here Types(18) = "Water" Dim Rng As Range Set Rng = Selection 'Remove any previous formatting Rng.FormatConditions.Delete For i = 1 To 18 'Add a rule for the type individually With Rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=" & Chr(34) & Types(i) & Chr(34)) .Interior.Pattern = xlPatternLinearGradient .Interior.Gradient.Degree = 0 .Interior.Gradient.ColorStops.Clear .Interior.Gradient.ColorStops.Add(0).Color = colors(i) .Interior.Gradient.ColorStops.Add(1).Color = RGB(255, 255, 255) End With For j = 1 To 18 'Add a rule for each combined type With Rng.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, _ Formula1:="=" & Chr(34) & Types(i) & "/" & Types(j) & Chr(34)) .Interior.Pattern = xlPatternLinearGradient .Interior.Gradient.Degree = 0 .Interior.Gradient.ColorStops.Clear .Interior.Gradient.ColorStops.Add(0).Color = colors(i) .Interior.Gradient.ColorStops.Add(1).Color = colors(j) End With Next j Next i End Sub 

让我知道如果这对你有用,我会好奇听到结果。