如何在VBA中对图表的图例进行排序

时间:2017-04-21 15:25:38

标签: excel vba excel-vba charts legend

我试图对我的传奇进行排序,但找不到任何可靠的答案。在这里Reordering Chart Data Series in Excel,您可以了解如何手动执行此操作。此外,在那里发布了一个代码,这对我来说不起作用,这对于像这样的任务来说太复杂了。基本上,我们正在尝试自动化下图所示的内容。

enter image description here

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

1 个答案:

答案 0 :(得分:2)

此代码获取系列名称,将它们放入数组中,对数组进行排序,并根据该数组定义将提供所需输出的绘图顺序。您可以将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 ...