VBA对表进行排序并忽略总行

Posted

技术标签:

【中文标题】VBA对表进行排序并忽略总行【英文标题】:VBA to sort table and ignore total row 【发布时间】:2014-01-02 09:33:16 【问题描述】:

我有Table3的范围如下图:

这些行不是固定的,可能会增加或减少,因此我将其创建为表 Table3 以适应这种行为,并且我可以在 VBA 中将其用作 ListObjects

下面的 VBA 用于对表格进行排序,但是由于 Totals 是范围的一部分,因此排序无法按预期工作。

子排序() ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort.SortFields _ 。清除 ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort.SortFields _ .Add Key:=Range("Table3[Description3]"), SortOn:=xlSortOnValues, Order:= _ xlAscending, DataOption:=xlSortNormal 使用 ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3").sort .Header = xl是 .MatchCase = 假 .Orientation = xlTopToBottom .SortMethod = xlPinYin 。申请 结束于 结束子

在应用排序之前,有人可以帮助修改代码以忽略Totals 行(即仅包括header 以下和Totals 行以上的范围)

编辑

目前,这是我尝试重新定义没有最后一行的新范围

子排序() Dim resizedTable As ListObject 设置 resizedTable = Sheets("Sheet1").ListObjects("Table1") 使用 resizedTable .Resize .Range.Resize(.Range.Rows.Count - 1, .Range.Columns.Count) 结束于 resizedTable.sort.SortFields.Clear resizedTable.sort.SortFields _ .Add Key:=Range("resizedTable[Description]"), SortOn:=xlSortOnValues, Order:= _ xlAscending, DataOption:=xlSortNormal .Header = xl是 .MatchCase = 假 .Orientation = xlTopToBottom .SortMethod = xlPinYin 。申请 结束子

任何帮助将不胜感激。

【问题讨论】:

只需将范围缩短一排,然后排序。使用 Range 对象的 Range 方法。 我会尝试使用具有内置总计的实际 Excel 表。然后记录一个进行排序的宏。 @DougGlancy 谢谢,但由于多种原因无法正常工作 但你的编辑说它是一个表/ListObject。 @DougGlancy - 我在 excel 中定义了一个表格范围,但另一个应用程序插入了表格数据和(子)总计,因此我取消选中插入小计的 Excel-Table 选项 - 就就 Excel 而言,该表没有(子)总计。 【参考方案1】:

为您的表格设置一个新范围,只缩短一行 »totalRowCount - 1。 这里,x 是你的输入范围

Set x = Range(x.Cells(1, 1), x.Cells(x.Rows.Count - 1, x.Columns.Count))

或使用 resize 方法

Sub CutOffLastLine()
    With ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table3")
        .Resize .Range.Resize(.Range.Rows.Count - 1, .Range.Columns.Count)
    End With
End Sub

【讨论】:

Dim resizedTable As ListObject Set resizedTable3 = ActiveWorkbook.Worksheets("Project 2013").ListObjects("Table1") With ResizedTable .Resize .Range.Resize(.Range.Rows.Count - 1, .Range.Columns.Count) 我尝试了与您的建议类似的上述方法,但我认为我以错误的顺序插入了它。我再试一次 我猜你同时找到了resize方法:)

以上是关于VBA对表进行排序并忽略总行的主要内容,如果未能解决你的问题,请参考以下文章

Javascript - 排序数组时忽略引号

Android排序sqlite查询结果忽略大小写

MS Access 2003 不进入调试模式并忽略断点

聚集函数

Excel VBA - 多级排序

如何在java中对字符串进行排序时忽略空格?