2015-04-01 294 views
0

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

+0

后您使用VBA此 - 或者提议? – pnuts 2015-04-01 16:23:24

+0

我正在使用VBA生成数据。我不介意图表是使用VBA格式还是通过常规的Excel界面格式化。 – user4739039 2015-04-01 18:57:16

回答

2

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