如何在VBA中对图表的sorting进行sorting

我试图sorting我的传奇,找不到任何可靠的答案。 这里, 在Excel中重新排列图表数据系列 ,您可以了解如何手动执行。 另外,在那里发布了一个代码,这对我来说并不合适,对于这样的任务来说太复杂了。 基本上,我们正在试图自动化在下面的图片中显示的内容。

在这里输入图像说明

如果您有同样的问题,请提出您的解决scheme或查找我的答案。

这段代码获取系列名称,将它们放入一个数组中,对数组进行sorting,并根据该数组定义绘制顺序,从而得到所需的输出。 您可以将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,... 在这种情况下,将数组转换为数字。 这里有一些问题,比如把一个数组转换成数字 ,这样就可以完成这个工作。 您也可以简单地比较每个元素的Cdbl与另一个元素的Cdbl 。 (即If Cdbl(Arr(r2)) > Cdbl(rval) Then ...