【问题标题】:VBA Excel sort range by specific columnVBA Excel按特定列排序范围
【发布时间】:2014-02-22 11:00:44
【问题描述】:

我有一个可以包含任意行数的表:

正如我所说,它可以包含 1 或 ∞ 行。

我想按 B 列中的日期单元格对范围 A3:D∞ 进行排序。
我该怎么做?

问题是我不知道如何从A3 中选择到最后一行。

我认为循环到最后一行不是正确的方法。

到目前为止,我得到了这个,它看起来是正确的,但是范围是硬编码的。
我如何摆脱范围的硬编码?

Range("A3:D8").Sort key1:=Range("B3:B8"), _
order1:=xlAscending, Header:=xlNo

【问题讨论】:

    标签: excel vba sorting


    【解决方案1】:

    试试这个代码:

    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
    

    【讨论】:

    • 请注意:这不适用于按字符串排序的日期时间数据类型。将字段转换为 long 然后排序更安全。
    【解决方案2】:

    或者这个:

    Range("A2", Range("D" & Rows.Count).End(xlUp).Address).Sort Key1:=[b3], _
        Order1:=xlAscending, Header:=xlYes
    

    【讨论】:

    • 我喜欢这个答案,因为它不涉及额外的变量
    • @sonyisda1 这是一个不好的理由,你可以用公式替换变量。但更清楚的是变量会发生什么。
    【解决方案3】:

    如果范围和键的起始单元格是静态的,则解决方案可以很简单:

    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
    
    猜你喜欢
    • 1970-01-01
    • 2018-03-29
    • 2015-08-02
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2021-09-03
    • 2020-09-28
    • 2015-11-08
    相关资源
    最近更新 更多