2015-04-01 120 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