Excel图表智能排序

163 篇文章 16 订阅
10 篇文章 0 订阅

实例需求:表格中的多个图表如下图左侧所示,对于表格进行排序时,希望第一列中的图表跟随相应数据。

在这里插入图片描述


方法1:

Sub SortTableWithChart()
    Dim oSht As Worksheet, RowCnt As Long, ColCnt As Long
    Dim arrData, i As Long, oCht As ChartObject
    Set oSht = ActiveSheet
    With oSht
        For Each oCht In .ChartObjects
            oCht.Name = oCht.TopLeftCell.Address(0, 0)
        Next
        RowCnt = .Cells(.Rows.Count, 2).End(xlUp).Row
        ColCnt = .Cells(1, .Columns.Count).End(xlToLeft).Column
        .Cells(1, ColCnt + 1) = "Index"
        With .Cells(2, ColCnt + 1).Resize(RowCnt - 1)
            .FormulaR1C1 = "=ROW()"
            .Formula = .Value
        End With
        With .Range("A1", .Cells(RowCnt, ColCnt + 1))
            .Sort Key1:=.Columns(3), Order1:=xlDescending, Header:=xlYes
            arrData = .Value
        End With
        For i = 2 To UBound(arrData)
            If arrData(i, ColCnt + 1) <> i Then
                With .ChartObjects("A" & arrData(i, ColCnt + 1))
                    .Top = oSht.Cells(i, 1).Top
                    .Left = oSht.Cells(i, 1).Left
                End With
            End If
        Next
        .Columns(ColCnt + 1).Clear
    End With
End Sub

【代码解析】
第6~8行代码循环遍历工作表中的ChartObject对象,将图表名称改为其锚点单元格(图表左上角单元格)的引用地址。
第9行代码获取表格的行数。
第10行代码获取表格的列数。
第11行代码添加辅助列标题。
第13行代码在辅助列设置公式,获取行号。
第14行代码将公式转换为静态值。
第17行代码按照辅助列降序排列。
第18行代码将表格内容(包含辅助列)加载到数组中。
第20~27行代码循环遍历每行数据,调整图表位置。
第21行代码对比辅助列的值和行号,如果相同,则无需调整改行的图表位置。
第22~25行代码将指定的图表调整到对应的行。
第28行代码清除辅助列。


方法2:

无需代码也可以实现相同的效果,选中图表,设置图表【属性】,选中【随单元格改变位置和大小】或【随单元格改变位置,但是不改变大小】。

在这里插入图片描述

在Excel界面中,对表格进行排序时,将自动调整位置。

请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值