【问题标题】:Excel Bar Chart - Same Color and Legend Entry for Same NamesExcel 条形图 - 相同名称的相同颜色和图例条目
【发布时间】:2015-04-03 05:09:30
【问题描述】:

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

【问题讨论】:

  • 我正在使用 VBA 生成数据。我不介意图表是使用 VBA 还是通过常规的 excel 界面格式化。

标签: excel vba charts


【解决方案1】:

状态名称存储为系列名称。图表中的每个堆栈都有一个系列。可以遍历系列并根据系列名称对其进行样式设置。也可以使用 LegendEntries 对象从 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

之前

之后

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2019-05-31
    • 2020-11-04
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-08-20
    相关资源
    最近更新 更多