[英]VBA Excel sort range by specific column
我有一个可以包含任意数量行的表:
正如我所说,它可以包含 1 或 ∞ 行。
我想按 B 列中的日期单元格对范围A3:D∞
进行排序。
我该怎么做?
问题是我不知道如何从A3
选择到最后一行。
我认为循环到最后一行不是正确的方法。
到目前为止,我已经得到了它,它看起来是正确的,但是范围是硬编码的。
如何摆脱范围的硬编码?
Range("A3:D8").Sort key1:=Range("B3:B8"), _
order1:=xlAscending, Header:=xlNo
试试这个代码:
Dim lastrow As Long
lastrow = Cells(Rows.Count, 2).End(xlUp).Row
Range("A3:D" & lastrow).Sort key1:=Range("B3:B" & lastrow), _
order1:=xlAscending, Header:=xlNo
或这个:
Range("A2", Range("D" & Rows.Count).End(xlUp).Address).Sort Key1:=[b3], _
Order1:=xlAscending, Header:=xlYes
您可以使用 Xatocode 中的SortRange
和GetCurrentRegionStartingGivenCell
函数以非常动态的方式对任何范围进行排序,如下所示:
' First you may define a worksheet level named range in cell "A2" and name it as rngData
Sub SortExample()
Dim rngData As Range ' Range to sort
Set rngData = GetCurrentRegionStartingGivenCell(shtData.Range("rngData"))
Call SortRange(rngData, True, 2, xlAscending, 3, xlDescending)
End Sub
你可以在这里阅读完整的文章
如果范围和键的起始单元格是静态的,则解决方案可能非常简单:
Range("A3").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort key1:=Range("B3", Range("B3").End(xlDown)), _
order1:=xlAscending, Header:=xlNo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.