2014-01-30 5 views
23

У меня есть таблица, которая может содержать любое количество строк:VBA Excel диапазон сортировать по конкретному столбцу

enter image description here

Как я сказал, он может содержать 1 или ∞ строки.

Я хочу сортировать диапазон A3: D∞ ячейкой Date, которая находится в столбце B. Как я могу это сделать?

Проблема в том, что я не знаю, как выбрать из A3 в последнюю строку.

Я думаю, что цикл в последнюю строку не является правильным методом.

У меня есть это до сих пор, он выглядит правильно, но диапазон жестко запрограммирован. Как мне избавиться от жесткого кодирования диапазона?

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

ответ

53

Попробуйте этот код:

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 
+2

Спасибо, что работает, через несколько минут отметит вас wer – Cheese

+0

Просто примечание: это не слишком хорошо работает с типом данных datetimes, которые сортируются как строки. Его безопаснее конвертировать поля в длинные, а затем сортировать. – Yasskier

+0

Тысячи голосов up! –

10

Или это:

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

Мне нравится этот ответ, так как он не включает дополнительную переменную – sonyisda1

+4

@ sonyisda1, это плохая причина, вы можете просто заменить переменную формулой. Но более ясно, что происходит с переменной. –

0

Если начальная ячейка диапазона и ключ является статическим, то решение может быть очень простым:

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 
+1

[Как избежать использования Select в Excel VBA] (https://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros) – Wolfie

Смежные вопросы