如何使用公式根据从红色到黄色再到绿色的颜色渐变值添加单元格颜色

如何使用公式根据从红色到黄色再到绿色的颜色渐变值添加单元格颜色

我有这样的价值观:Excel 列的屏幕截图

如果值高于 -5 或 +5,它们也是红色。所有趋向于 0 的东西都会变得更绿,就像屏幕截图一样。 使用条件格式对每一列进行格式化的工作量很大。这就是我们目前的做法。

是否可以使用一个公式来为单元格背景着色,就像我在屏幕截图中所做的那样?尤其是从红色到黄色到绿色的渐变?

这里有更多数据。截屏

答案1

基于 VBA 的解决方案的提议。您定义两个颜色标度:一个用于负数,一个用于正数。您需要选择两个单元格(分隔)作为参考单元格。我选择了A6C6。您可以将整个调色板放在那里,但这不是必需的,只需一个单元格就足够了。在这些单元格中,将首先定义颜色标度(并且只定义一次),然后根据值是负数还是正数为新单元格分配适当的标度。
定义主要标度后,您需要指定要格式化的单元格范围(G4:K11在示例中),并AppendRange以该范围作为参数调用该过程。只有包含数字的单元格才会被格式化。
如果分配了标度,您可以更改格式化单元格的值,但不能更改符号。如果单元格更改了符号或添加了新符号,请AppendRange再次调用该过程。您需要做的就是将这些新的或更改的单元格指定为范围。

Option Explicit
Const CGreen = 8109667, CYellow = 8711167, CRed = 7039480
Public patplus As Range, patminus As Range
Sub AddRangeToCF(rng1, rng2)
    Set patplus = rng1
    DefPlus patplus.CurrentRegion
    Set patminus = rng2
    DefMinus patminus.CurrentRegion
End Sub
Sub DefPlus(rng As Range)
        rng.FormatConditions.Delete
        With rng.FormatConditions.AddColorScale(ColorScaleType:=3)
        .ColorScaleCriteria(1).Type = xlConditionValueNumber
        .ColorScaleCriteria(1).Value = 0
        .ColorScaleCriteria(1).FormatColor.Color = CGreen
        .ColorScaleCriteria(2).Type = xlConditionValuePercent
        .ColorScaleCriteria(2).Value = 50
        .ColorScaleCriteria(2).FormatColor.Color = CYellow
        .ColorScaleCriteria(3).Type = xlConditionValueNumber
        .ColorScaleCriteria(3).Value = 5
        .ColorScaleCriteria(3).FormatColor.Color = CRed
    End With
End Sub
Sub DefMinus(rng As Range)
    rng.FormatConditions.Delete
    With rng.FormatConditions.AddColorScale(ColorScaleType:=3)
        .ColorScaleCriteria(1).Type = xlConditionValueNumber
        .ColorScaleCriteria(1).Value = -5
        .ColorScaleCriteria(1).FormatColor.Color = CRed
        .ColorScaleCriteria(2).Type = xlConditionValuePercent
        .ColorScaleCriteria(2).Value = 50
        .ColorScaleCriteria(2).FormatColor.Color = CYellow
        .ColorScaleCriteria(3).Type = xlConditionValueNumber
        .ColorScaleCriteria(3).Value = 0
        .ColorScaleCriteria(3).FormatColor.Color = CGreen
    End With
End Sub
Sub AppendCell(cell As Range)
    If Application.IsNumber(cell.Value) Then
        Select Case cell.Value
            Case Is >= 0
                DefPlus Union(cell, FindSame(patplus))
            Case Is < 0
                DefMinus Union(cell, FindSame(patminus))
        End Select
    End If
End Sub

Function FindSame(pat As Range) As Range
    Set FindSame = pat.SpecialCells(xlCellTypeSameFormatConditions)
End Function

Sub AppendRange(rng As Range)
    Dim rngplus As Range, rngminus As Range, cell As Range
    Set rngplus = patplus
    Set rngminus = patminus
    For Each cell In rng
        If Application.IsNumber(cell.Value) Then
            Select Case cell.Value
                Case Is >= 0
                    Set rngplus = Union(rngplus, cell)
                Case Is < 0
                    Set rngminus = Union(rngminus, cell)
            End Select
       End If
   Next cell
   If rngplus.Count > 1 Then DefPlus Union(rngplus, FindSame(patplus))
   If rngminus.Count > 1 Then DefMinus Union(rngminus, FindSame(patminus))
End Sub

Sub Test()
    AddRangeToCF Range("C6"), Range("A6")
    AppendRange Range("G4:K11")
End Sub

色阶

相关内容