我正在努力为条件格式化重现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模式,我想我就在这里。但边框颜色仍然不合适。我想知道,如果有人有更好的解决方案。