Excel VBA - 根据其他单元格上的 2 个值(最大值/最小值)使用 2 种颜色标度有条件地格式化单元格

Excel VBA - 根据其他单元格上的 2 个值(最大值/最小值)使用 2 种颜色标度有条件地格式化单元格

我正在尝试编写 VBA 代码,根据单元格 A1 的值(介于 >= 单元格 A2 和 <= 单元格 A3 之间)有条件地格式化(2 色标度)单元格 A1。我使用单元格 A2 和 A3,因此我可以更改特定的值范围。

例如,如果单元格 A2 为 50 且单元格 A3 为 1,则根据 A1 的值将单元格 A1 的背景颜色从最深绿色(最高;单元格 A2;50)更改为最浅绿色(最低;单元格 A3;1)- 如果不在 50 和 1 之间,则无需格式。


我能够为类似实例(在模块中)编写以下代码。以下代码适用于给定的单元格范围,而我想要的是具有变化值的单个单元格。

Sub ColorChange()

Application.ScreenUpdating = False

    ' Fill a range with numbers from 1 to 25.
    Dim rng As Range
    Set rng = Range("A1:A25")

    Range("A1") = 1
    Range("A2") = 2
    Range("A1:A2").AutoFill Destination:=rng

    rng.FormatConditions.Delete

    'Add a 2-color scale.
    Dim cs As ColorScale
    Set cs = rng.FormatConditions.AddColorScale(ColorScaleType:=2)

    ' Format the first color as light green
    With cs.ColorScaleCriteria(1)
        .Type = xlConditionValueLowestValue
        With .FormatColor
            .Color = vbGreen
            ' TintAndShade takes a value between -1 and 1.
            ' -1 is darkest, 1 is lightest.
            .TintAndShade = 0.5
        End With
    End With

    ' Format the second color as dark green, at the highest value.
    With cs.ColorScaleCriteria(2)
        .Type = xlConditionValueHighestValue
        With .FormatColor
            .Color = vbGreen
            .TintAndShade = -0.5
        End With
    End With

Application.ScreenUpdating = True

End Sub

答案1

您需要使用“Worksheet_change”方法来更改添加新数据时的格式。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.FormatConditions.Count = 0 Then
        <add your code here>
    End If
End Sub  

我对 VBA 中的条件格式没有太多经验。也许每次添加数据时创建一个新条件,当您打开条件格式菜单时,最终会产生很多格式组。为了将其保持为一种格式,您可能需要始终为整个范围设置格式(set rng=Range("A1:A" & target.row))。

VBA 免费解决方案:如果您将数据转换为表格(插入 - 来自 EXCel 2007 的表格),那么只要用户在现有数据下方立即添加行,您的公式和条件格式也将自动传输到新行。

相关内容