2017-04-21 154 views
0

我想對我的圖例進行排序並找不到任何可靠的答案。在這裏,Reordering Chart Data Series in Excel,你可以找出如何手動。此外,還有一個代碼發佈在那裏,這不適合我,對於這樣的任務來說太複雜了。基本上,我們正試圖自動化下圖中顯示的內容。如何排序VBA圖表的圖例

enter image description here

請提出你的解決方案或查找我的回答如果你有同樣的問題。

回答

1

此代碼獲取系列名稱,將它們放入數組中,對數組進行排序,並基於該數組定義繪製順序,從而得到所需的輸出。您可以將ActiveChart更改爲圖表名稱以更明確。隨意應用任何改進。

Sub Sorting_Legend() 


    Dim Arr() 
    ReDim Arr(1 To ActiveChart.FullSeriesCollection.Count) 

     'Assigning Series names to an array 
     For i = LBound(Arr) To UBound(Arr) 
     Arr(i) = ActiveChart.FullSeriesCollection(i).Name 
     Next i 

     'Bubble-Sort (Sort the array in increasing order) 
     For r1 = LBound(Arr) To UBound(Arr) 
      rval = Arr(r1) 
       For r2 = LBound(Arr) To UBound(Arr) 
        If Arr(r2) > rval Then 'Change ">" to "<" to make it decreasing 
         Arr(r1) = Arr(r2) 
         Arr(r2) = rval 
         rval = Arr(r1) 
        End If 
       Next r2 
     Next r1 

    'Defining the PlotOrder 
    For i = LBound(Arr) To UBound(Arr) 
    ActiveChart.FullSeriesCollection(Arr(i)).PlotOrder = i 
    Next i 

End Sub 

Excel將該系列的名稱視爲文本。所以你會遇到這個問題,而不是有1,2,3,...你最終得到1,10,11,...,19,2,20,...。在這種情況下,將數組轉換爲數字。這裏有一些問題,如convert an array to number,可以完成這項工作。您也可以簡單地比較每個元素的Cdbl與另一個元素。 (即If Cdbl(Arr(r2)) > Cdbl(rval) Then ...

+0

這將完成這項工作,但如果您能想到更好的方法,請在此處發佈。 – Masoud