VBA对表进行排序并忽略总行
Posted
技术标签:
【中文标题】VBA对表进行排序并忽略总行【英文标题】:VBA to sort table and ignore total row 【发布时间】:2014-01-02 09:33:16 【问题描述】:我有Table3
的范围如下图:
这些行不是固定的,可能会增加或减少,因此我将其创建为表 Table3
以适应这种行为,并且我可以在 VBA 中将其用作 ListObjects
。
下面的 VBA 用于对表格进行排序,但是由于 Totals
是范围的一部分,因此排序无法按预期工作。
在应用排序之前,有人可以帮助修改代码以忽略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对表进行排序并忽略总行的主要内容,如果未能解决你的问题,请参考以下文章