2016-06-03 3 views
0

Я не знаю, подходит ли это для этого. Но здесь идет. У меня есть некоторые первенствуют данные:Excel VBA: Сортировка строк Численно (по значению столбца) THEN сортировка по одной конкретной строке

Column 1 | Column 2 
1  | open 
3  | issue 
7  | closed 
8  | open 

Мне нужно сортировать по колонку 2 (все столбцы с «открытым» в верхней части списка, но с числовыми родами также поэтому строки с «8, Open» будут на top), тогда остальная часть строк должна сначала отсортировать только числовые числа.

в результате:

Column 1 | Column 2 
8  | open 
1  | open 
7  | closed 
3  | issue 

Ниже мой код числовой только (столбец 12). Мне нужна помощь в другом аспекте.

With ActiveSheet.Sort 
    .SortFields.Clear 
    .SortFields.Add Key:=Selection.EntireRow.Columns(12), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal 
    .SetRange ActiveSheet.Range(Data) 
    .Header = xlGuess 
    .MatchCase = False 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

ответ

0

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

ActiveSheet.Sort.SortFields.Clear 
ActiveSheet.Sort.SortFields.Add Range("B1"), xlSortOnValues, xlAscending, "Open" 
ActiveSheet.Sort.SortFields.Add Range("A1"), xlSortOnValues, xlDescending 
With ActiveSheet.Sort 
    .SetRange Range(Data) 
    .Header = xlGuess 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

EDIT:
_________________________________________________________________________________

Dim SortStr As Variant 
Dim SortNum As Long 

'change below array as per your requirement 
SortStr = Array("Open", "in progress", "almost finished") 
Application.AddCustomList ListArray:=SortStr 
SortNum = Application.CustomListCount 

ActiveSheet.Sort.SortFields.Clear 
ActiveSheet.Sort.SortFields.Add Range("B1"), xlSortOnValues, xlAscending, SortNum 
ActiveSheet.Sort.SortFields.Add Range("A1"), xlSortOnValues, xlDescending 
With ActiveSheet.Sort 
    .SetRange Range(Data) 
    .Header = xlGuess 
    .Orientation = xlTopToBottom 
    .SortMethod = xlPinYin 
    .Apply 
End With 

Application.DeleteCustomList Application.CustomListCount 
+0

Если бы я хотел сортировать по дополнительным ключевым словам, например «in progress», то «почти закончен», как бы добавить эти элементы. Итак, все «Открывается сверху численно, затем все« в процессе »численно и т. Д. – user937036

+0

Хорошо еще одна вещь, числовая сортировка работает, но пустые поля находятся в верхней части, если я хочу, чтобы поля BLANK были внизу, что мне нужно делать? – user937036

0

можно использовать Sort метод Range объекта

Dim iniRow As Long 

With Range("Data") 
    .Sort key1:=.Range("B1"), order1:=xlDescending, Header:=xlYes '<~~ first sort by column 2 ("B" in my test) 
    iniRow = Application.CountIf(.Columns(2).Cells, "open") '<~~ then count how many "open" are there 
    .Offset(iniRow + 1).Resize(.Rows.Count - (iniRow + 1)).Sort key1:=.Range("A" & iniRow + 2), order1:=xlDescending, Header:=xlNo '<~~ finally order remaining by column 1 ("A" in my test) 
End With 
+0

@ user937036: Вы сделали это? – user3598756

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