【发布时间】:2016-04-21 00:26:38
【问题描述】:
我想实现一个 Excel 宏,对从“C”列到包含数据的最后一列的所有列进行排序(A 列和 B 列不受影响)。
列应根据第一行的单元格值从 A->Z 排序(这是一个字符串)。
到目前为止,我想出了以下我不太喜欢的代码,因为它包含排序范围的硬编码数字,这使得代码不是很健壮。
Sub SortAllColumns()
Application.ScreenUpdating = False
'Sort columns
With ActiveWorkbook.Worksheets("mySheet").Sort
.SetRange Range("C1:ZZ1000")
.Header = xlYes
.MatchCase = False
.Orientation = xlLeftToRight
.Apply
End With
Application.ScreenUpdating = True
End Sub
在互联网上搜索,您可能会发现大量关于获取最后使用的列或行的建议。然而,他们中的大多数会比我预期的更严重地破坏代码。
我不是 VBA 专家,如果有人能提出如何以优雅高效的方式解决此问题的建议,那就太好了。
如果这很重要:我们肯定不会超过 1000 行和 1000 列。
非常感谢任何建议。
【问题讨论】:
-
您提到从 C 列开始,但是,在您指定的范围内,从 E 列开始?应该是哪个?
-
I do not like that much because it contains hardcoded numbers for the Sort range making the code not really robust.你需要找到最后一行有数据,然后构造你的范围.SetRange Range("E1:ZZ" & LastRow)。请参阅THIS 链接了解如何找到最后一行。 -
同样你可以找到最后一列:)
-
@Janis S. 你是对的。这是示例代码中的一个错误。谢谢!
-
@SiddharthRout 感谢您的建议。我去看看