条件色彩量表 - 以编程方式

时间:2018-01-05 08:54:44

标签: excel vba conditional-formatting

我正在努力为条件格式化重现Excel三色调背后的逻辑。这是您选择主页时显示的第二个选项 - >条件格式 - >颜色比例(红 - 黄 - 绿)。我已经开始使用这个子程序了:

Sub Tricolore(Rng As Range)
Dim cl As Range
Dim dMax As Double
Dim dMin As Double
Dim dMed As Double
Dim dRed As Double
Dim dGreen As Double

dMax = WorksheetFunction.Max(Rng)
dMin = WorksheetFunction.Min(Rng)
dMed = WorksheetFunction.Median(Rng)

For Each cl In Rng

    'Here calculation begins
    If cl.Value <= dMed Then
        dGreen = 1
        dRed = (cl.Value - dMin) / (dMed - dMin)
    Else
        dRed = 1
        dGreen = (dMax - cl.Value) / (dMax - dMed)
    End If
    'and here it ends

    cl.Interior.Color = RGB(dRed * 255, 180 * dGreen, 110)
Next cl
End Sub

这里有两个问题。第一种和最后一种颜色与MS Excel使用的颜色不匹配,我不知道如何找到色标的精确RGB参数。这里和那里有解决方案来获得CF设置的背景颜色,但它们似乎不适用于颜色标量。 第二个问题是,对于接近最大值和最小值的值,颜色变化太快,并且慢慢接近范围的中值。 所以,我试图在注释之间使用一些三角函数和修改代码:

If cl.Value <= dMed Then
    dGreen = 1
    dRed = Sin((cl.Value - dMin) / (dMed - dMin) * Pi / 2)
Else
    dRed = 1
    dGreen = Sin((dMax - cl.Value) / (dMax - dMed) * Pi / 2)
End If

下面你可以看到结果。正弦刻度似乎遵循Excel CF模式,我想我就在这里。但边框颜色仍然不合适。我想知道,如果有人有更好的解决方案。

enter image description here

0 个答案:

没有答案