【问题标题】:Excel - Conditional Format Left and Right Gradients Independently?Excel - 条件格式左右渐变独立?
【发布时间】:2017-10-27 17:27:00
【问题描述】:

我正在为 Pokémon 类型制作 Excel 表格。

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

工作表的另一部分使用以下公式将这种类型组合成一个单元格(效果很好):

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

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

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

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

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

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

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

如果有办法让一个单元格将两个渐变规则应用于一个单元格,那么规则的数量将仅为 18*2 = 36(左侧渐变为 18,右侧渐变为 18),这是可管理的。

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

【问题讨论】:

  • 两个下拉列表中的所有项目都相同吗?
  • 是的,除了 Type 2 有一个额外的选项“(无)”,如我帖子中的第一张图片所示,但为什么回答这个问题很重要?
  • 恐怕没有VBA这是不可能的。无法为格式本身创建规则,例如 If(B2="Grass";"some color")。正因为如此,并且因为您确实有 18*18 的可能性,所以您将需要这么多条件规则。如果您可以使用 VBA,那么这可能非常简单。我建议一个更简单的解决方案,即使用两个单元格作为结果并应用常规和条件格式,使这两个单元格显示为一个。
  • 是的,我想过并排使用两个单独的单元格。我试图通过结合它们来变得花哨哈哈。感谢您的帮助。
  • 这可以通过使用 VBA 来完成 我敢肯定,我从未尝试过,但 VBA 应该能够在单独的表中查找,您可以为下拉列表中的每个值预先创建一个 RGB 颜色.您没有指定 VBA,所以我预计您不希望您的用户收到 XSLM 工作簿。

标签: excel conditional-formatting


【解决方案1】:

如何使用 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

如果这对你有用,请告诉我,我很想知道结果。

【讨论】:

  • 谢谢,我对VBA一点也不熟悉,我会在这里给你答案。
  • 享受吧。如果您需要任何实施代码的指导,请告诉我。附带说明一下,我又进行了一些测试,并且能够为一个单元格创建 4,100 个独特的条件格式规则。我试图提高,但结果变得不可靠......我想早在你达到 Excel 的最大值之前,你就达到了实际的最大值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
相关资源
最近更新 更多