Excel - 条件格式左右渐变独立?

Excel - Conditional Format Left and Right Gradients Independently?

我正在为神奇宝贝类型开发 Excel sheet。

sheet 的一部分允许您选择神奇宝贝类型。单元格 B3C3 允许通过数据验证从类型下拉列表中选择类型。见下文。

sheet 的另一部分使用以下公式(效果很好)将此类型组合到一个单元格中:

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

在这种情况下,上面的公式将 return Grass/Poison.

一切都很好,但我想使用此单元格并有条件地使用 2 色渐变对其进行格式化以反映双重打字。

问题是我想不出一种方法来为每个渐变颜色设置单独条件格式设置规则。

换句话说,如果我有这两个条件格式规则(如下所示),它将应用其中一个,但不会同时应用两个。

这个问题的一个明显的解决方案是使用一个条件格式规则来处理这个特定的组合。 (见下文。)虽然下面没有完全显示,但此规则的条件格式公式为 =AND(B3="Grass",C3="Poison").

这个解决方案确实有效。但是,考虑到有 18 种类型,这意味着我必须为此单元格制定 18^2 = 324 个单独的条件格式设置规则(以处理所有可能的类型组合),我怀疑 Excel 是否支持那么多条件格式设置规则对于单个单元格,即使可以,集成起来也太乏味了。

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

有谁知道如何让条件格式规则将渐变颜色仅应用到一半的单元格(并允许另一半单元格被另一个带渐变的条件格式规则更改)?这可能吗?

使用 VBA 添加条件格式怎么样?我没有听过或体验过最大条件格式规则,但我不自称是专家。

下面的代码将遍历每种类型,并根据指定的颜色和类型名称为渐变添加条件格式设置规则。我现场测试了它,它对我有用。

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

让我知道这是否适合您,我很想知道结果。