如何对Excel工作表数据源生成的图表数据进行降序排序
方案1:无代码手动/半自动方案
- 选中数据源区域,按
Ctrl+T转换为Excel超级表,勾选「表包含标题」确认 - 选中表内的数值列,点击「数据」选项卡→「排序和筛选」组的「降序」按钮,图表会自动同步排序结果
- 如果需要数据更新后自动排序,可将数据源导入Power Query设置按数值列降序后加载回工作表,图表关联加载后的输出区域即可实现自动同步排序
方案2:VBA自动处理方案
分为两种实现逻辑,按需选择:
逻辑1:修改原始数据源实现排序(最稳定,推荐)
直接对图表绑定的数据源做排序,图表会自动同步效果,代码如下:
Sub 图表按值降序排序() Dim ws As Worksheet Dim srcRng As Range Dim cht As Chart ' 修改为你实际的工作表名 Set ws = ThisWorkbook.Worksheets("Sheet1") ' 修改为你实际的图表名,若当前已选中图表可替换为 Set cht = ActiveChart Set cht = ws.ChartObjects("图表 1").Chart ' 获取第一个系列对应的数据源区域 Set srcRng = cht.FullSeriesCollection(1).Values.Parent.CurrentRegion ' 执行排序 With ws.Sort .SortFields.Clear ' 此处Columns(2)代表以数据源第2列(数值列)为排序依据,可按需修改 .SortFields.Add Key:=srcRng.Columns(2), Order:=xlDescending .SetRange srcRng .Header = xlYes ' 数据源无表头时替换为xlNo .Apply End With End Sub
逻辑2:不修改原始数据源,直接修改图表系列排序
适合不想改动工作表原始数据的场景,先读取系列的标签和数值到数组排序后再写回图表:
Sub 仅修改图表排序_不改动数据源() Dim s As Series Dim arrData As Variant Dim i As Long, j As Long Dim tempVal As Double, tempCat As String Set s = ActiveChart.FullSeriesCollection(1) ' 把类别标签和数值存入二维数组 ReDim arrData(1 To s.Points.Count, 1 To 2) For i = 1 To s.Points.Count arrData(i, 1) = s.XValues(i) arrData(i, 2) = s.Values(i) Next ' 冒泡排序按数值降序,数据量很大的话可以换更高效的排序算法 For i = LBound(arrData, 1) To UBound(arrData, 1) - 1 For j = i + 1 To UBound(arrData, 1) If arrData(i, 2) < arrData(j, 2) Then tempVal = arrData(j, 2) arrData(j, 2) = arrData(i, 2) arrData(i, 2) = tempVal tempCat = arrData(j, 1) arrData(j, 1) = arrData(i, 1) arrData(i, 1) = tempCat End If Next Next ' 把排序后的数组写回图表 s.XValues = Application.Index(arrData, 0, 1) s.Values = Application.Index(arrData, 0, 2) End Sub
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

