Excel-条件格式左侧和右侧渐变是否独立?

Excel-条件格式左侧和右侧渐变是否独立?,excel,conditional-formatting,Excel,Conditional Formatting,我正在为神奇宝贝类型制作Excel表格 工作表的一部分允许您选择神奇宝贝类型。单元格B3和C3允许通过数据验证从类型下拉列表中选择类型。见下文 工作表的另一部分使用以下公式将此类型组合为单个单元格(工作正常): 在这种情况下,上面的公式将返回Grass/Poison 这一切都很好,但我想把这个单元格,有条件地格式化为2色渐变,以反映双重类型 问题是,我无法找到一种方法来为每个渐变颜色分别设置条件格式规则 换句话说,如果我有这两个条件格式规则(如下所示),它将应用其中一个,但不能同时应用这两个规

我正在为神奇宝贝类型制作Excel表格

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

工作表的另一部分使用以下公式将此类型组合为单个单元格(工作正常):

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

这一切都很好,但我想把这个单元格,有条件地格式化为2色渐变,以反映双重类型

问题是,我无法找到一种方法来为每个渐变颜色分别设置条件格式规则

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

这个问题的一个显而易见的解决方案是使用一个条件格式规则来处理这个特定的组合。(见下文。)尽管下面没有完全显示,但此规则的条件格式公式是
=和(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

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

两个下拉列表中的所有项目都相同吗?是的,除了我帖子第一张图片中显示的类型2有一个额外的选项“(无)”,但为什么这对回答这个问题很重要?我担心没有VBA这是不可能的。无法为格式本身创建规则,例如If(B2=“Grass”;“some color”)。正因为如此,而且因为你有18*18的可能性,你需要这么多的条件规则。如果您可以使用VBA,那么这可能非常简单。我建议一个更简单的解决方案,那就是在结果中使用两个单元格,并应用规则和条件格式,使这两个单元格显示为一个。是的,我想过同时使用两个单独的单元格。我试着把它们结合起来让自己看起来很花哨哈哈。感谢您的帮助。这可以通过使用VBA来实现。我确信,我从未尝试过,但VBA应该能够在单独的表格中查找,您可以为下拉列表中的每个值预先创建RGB颜色。您没有指定VBA,所以我希望您不希望您的用户收到XSLM工作簿。谢谢,我对VBA一点也不熟悉,我将在这里给您一个答案。祝您愉快。如果您需要任何实现代码的指导,请告诉我。作为补充说明,我又运行了一些测试,并且能够为一个单元格创建4100个唯一的条件格式规则。我试着走得更高,但结果变得不可靠。。。我想在你达到Excel的最大值之前,你已经达到了一个实际的最大值。
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