VBA对没有硬编码的范围进行排序

时间:2017-08-10 20:32:59

标签: excel vba sorting range

我正在尝试对一系列单元格进行排序,而不对起始点和停止点进行硬编码。我的范围将始终从A列开始并跨越到M列,但是它停止和开始的行会有所不同。我想出了如何设置变量并将其合并到最后一行的Range函数中,但我无法弄清楚如何为该范围应该开始的行执行此操作。到目前为止,这是我的代码:

Range("A6:M" & lastRow).Sort Key1:=Range("A6"), Order1:=xlAscending, Header:=xlNo

只有当我在第6行开始我的范围时,这才有效。我无法弄清楚的是如何告诉excel在A列中非空白的第一行开始我的范围。

谢谢!

1 个答案:

答案 0 :(得分:0)

确定A1是否为空白。如果不是空白则使用A1,如果是空白则使用[ctrl] + [向下]。

dim startRow as long, lastRow as long
With worksheets("sheet1")
    lastRow = .cells(.rows.count, "M").end(xlup).row
    if isempty(.cells(1, "A") then
        startrow = .cells(1, "A").end(xldown).row
    else
        startRow = 1
    end if
    with .range(.cells(startrow, "A"), .cells(lastrow, "M"))
        .cells.Sort Key1:=.cells(1), Order1:=xlAscending, Header:=xlNo
    end with
end with