繁体   English   中英

VBA Excel按特定列排序范围

[英]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 中的SortRangeGetCurrentRegionStartingGivenCell函数以非常动态的方式对任何范围进行排序,如下所示:

' 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM