我在Excel中有一个包含正数和负数的列,并制作了一个数据栏。如果要说我有55、24、0,-10和-45,则55完全用绿色条最大跨度填充,而-45相同但红色。这是我到目前为止拥有的VBA代码:
这是我要实现的可视化范围:
数据栏
||||||||||||| (绿色)12
|||||| (绿色)6
||||||||||| (红色)-10
||||||||||||||| (红色)-14
以此类推.....
Function UpdateAmountBars(rng As Range)
Dim min As Double, max As Double
Let min = Application.min(rng)
Let max = Application.max(rng)
rng.FormatConditions.AddDatabar
rng.FormatConditions(rng.FormatConditions.Count).ShowValue = True
rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority
With rng.FormatConditions(1)
.MinPoint.Modify newtype:=xlConditionValueAutomaticMin
.MaxPoint.Modify newtype:=xlConditionValueAutomaticMax
End With
With rng.FormatConditions(1).BarColor
.Color = RGB(100, 255, 100)
.TintAndShade = 0
End With
rng.FormatConditions(1).BarFillType = xlDataBarFillGradient
rng.FormatConditions(1).Direction = xlContext
rng.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
rng.FormatConditions(1).BarBorder.Type = xlDataBarBorderNone
With rng.FormatConditions(1).NegativeBarFormat.Color
.Color = RGB(255, 100, 100)
.TintAndShade = 0
End With
End Function
,这是代码的结果: VBA DataBAR positive negative
更新:我已经取得了一些进展,现在数据栏看起来不错,但是我还是不想分割单元格
Function UpdateAmountBars(rng As Range)
Dim min As Double, max As Double, databar As databar
Let min = Application.min(rng)
Let max = Application.max(rng)
Set databar = rng.FormatConditions.AddDatabar
databar.AxisPosition = xlDataBarAxisAutomatic
rng.FormatConditions(rng.FormatConditions.Count).ShowValue = True
rng.FormatConditions(rng.FormatConditions.Count).SetFirstPriority
With rng.FormatConditions(1)
.MinPoint.Modify newtype:=xlConditionValueAutomaticMin, newvalue:=min
.MaxPoint.Modify newtype:=xlConditionValueAutomaticMax, newvalue:=max
End With
With rng.FormatConditions(1).BarColor
.Color = RGB(100, 255, 100)
.TintAndShade = 0
End With
rng.FormatConditions(1).BarFillType = xlDataBarFillGradient
rng.FormatConditions(1).Direction = xlContext
rng.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
rng.FormatConditions(1).BarBorder.Type = xlDataBarBorderNone
With rng.FormatConditions(1).NegativeBarFormat.Color
.Color = RGB(255, 100, 100)
.TintAndShade = 0
End With
End Function
这是更新结果:VBA Data bar axisPosition
答案 0 :(得分:0)
添加并尝试以下代码。
.FormatConditions(1).AxisPosition = None
在代码的此处使用上述代码。
rng.FormatConditions(1).BarFillType = xlDataBarFillGradient
rng.FormatConditions(1).Direction = xlContext
rng.FormatConditions(1).NegativeBarFormat.ColorType = xlDataBarColor
rng.FormatConditions(1).BarBorder.Type = xlDataBarBorderNone
答案 1 :(得分:0)
我的数据栏存在相同的问题。对于最接近0的负值,条形最大,并且负数越大,条形变得越小,这与我想要实现的相反。