Excel条形图 - 相同名称的相同颜色和图例条目

时间:2015-04-01 16:19:06

标签: excel vba charts

我想在一段时间内绘制一台机器的状态。例如,它可能是"运行" 2小时然后"停止"持续1小时,每种状态可能会发生几次。使用堆积条形图我想显示状态和它在该状态下停留的时间。 我发现excel正在为每个新状态实例分配一个新的颜色和图例条目,即使该状态已经发生。
如何在图表中使相同的状态具有相同的颜色(例如,每次"运行"显示它具有相同的颜色和单个图例条目)?感谢

1 个答案:

答案 0 :(得分:2)

州名称存储为系列名称。图表中的每个堆栈都有一个系列。可以遍历系列并根据系列名称对它们进行样式设置。也可以使用LegendEntries对象从Legend中删除条目。

将这些组合成一个循环,如果它与标题匹配,您可以更新系列颜色,如果它不是前两个系列中的一个,则从Legend中删除该项目。这假定"运行"并且"停止"在开始时交替,并且是在传奇中保留的条目。如果不是这种情况,您可以采用更多逻辑来发现要保留的条目。

Sub style_chart()

    Dim cht As Chart
    Dim ser As Series

    'uses the active chart... assume it is selected
    Set cht = ActiveChart

    With cht
        'reset legend so that it matches series
        .HasLegend = False
        .HasLegend = True

        'iterate backwards to delete
        For i = .SeriesCollection.Count To 1 Step -1
            Set ser = .SeriesCollection(i)

            'set series colors based on name
            If ser.Name = "running" Then
                ser.Format.Fill.ForeColor.RGB = RGB(0, 176, 80)
            ElseIf ser.Name = "stopped" Then
                ser.Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
            End If

            'delete the legend entry if after first 2
            If i > 2 Then
                .Legend.LegendEntries(i).Delete
            End If
        Next i
    End With

End Sub

之前

before

之后

after