【问题标题】:Changing Bar colors using VBA based on category label使用基于类别标签的 VBA 更改条形颜色
【发布时间】:2015-03-03 16:24:24
【问题描述】:

我在 excel 中有一个 VBA 代码来更改条形图的颜色,但它不适用于类别系列。

ActiveChart.SeriesCollection(1).Interior.Color = RGB(0, 153, 64) 

我想更改单个条的颜色。但是,上面的代码改变了所有条的颜色。

对于所有条形,我想要一种颜色(绿色),除了代表两个数据点的两个条形(Average1 和 average2);这些应该是不同的颜色。谁能告诉我如何用 VBA 做到这一点?

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    Jesse's answer 通常是最干净的方法。

    但是,“要拥有不同颜色的条,它们必须在不同的系列上”是不准确的(我的重点)。您可以在一个系列中混合和匹配颜色。例如,这会使第一个系列的第二个条变为红色:

    ActiveChart.SeriesCollection(1).Points(2).Interior.Color = RGB(255, 0, 0)
    

    您可以使用它来执行各种巧妙的技巧,例如突出显示超过某个阈值、与闰年相关的条形或其他任何东西。您当然可以选择以这种方式突出您的 average1 和 average2 值。


    如果要更改具有给定特征的点的颜色,则必须遍历所有点,直到找到具有该特征的点。例如,如果要将类别 (XValue) 为 "avg" 的点涂成红色,则可以这样做:

    Dim c As Chart
    Dim s As Series
    Dim iPoint As Long
    Dim nPoint As Long
    
    Set c = ActiveChart
    Set s = c.SeriesCollection(1)
    
    nPoint = s.Points.Count
    For iPoint = 1 To nPoint
        If s.XValues(iPoint) = "avg" Then
            s.Points(iPoint).Interior.Color = RGB(255, 0, 0)
        End If
    Next iPoint
    

    【讨论】:

    • @Jean - 感谢您的回复。它对点非常有效,但我的数据集中的平均值并不总是在同一点。我怎么能说如果数据(水平类别=“平均”)然后将代码着色为绿色?
    【解决方案2】:

    你的问题不在于 VBA,要拥有不同颜色的条,它们必须在不同的系列上。

    在基础颜色系列中留出一个空隙,然后在第二个系列中添加您想要着色的值并为其着色。您的数据将如下所示:

    Series | Month 1 | Month 2 | Month 3 | Month 4 | Month 5 | Month 6 | Month 7
      1         10        12       15                   14                  10
      2                                       17
      3                                                           18
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多