VBA Excel DataBar不能使用正负数,两种颜色,我需要最小负数完全填充

时间:2018-11-24 10:59:49

标签: excel vba excel-vba conditional-formatting

我在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

2 个答案:

答案 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的负值,条形最大,并且负数越大,条形变得越小,这与我想要实现的相反。