2015-02-15 2 views
0

Я пытался сортировать диапазон ячеек и не могу получить результат, который я хочу. Диапазон ячеек содержат значения, такие как:
1-11-1
1-10-2
1-12-1
1-11-2
1-10-1
1-12- 2

Пользовательский Сортировка по номерам и "-"

Результат, который я ищу это:
1-10-1
1-11-1
1-12-1
1-10-2
1-1 1-2
1-12-2

Я попробовал несколько различных пользовательских видов (### - ### - ### и «0,1,2,3,4,5,6 , 7,8,9, -, 0,1,2,3,4,5,6,7,8,9, -, 0,1,2,3,4,5,6,7,8,9 "), но не может получить правильный результат. Возможно ли даже получить результаты сортировки, которые я хочу, или, возможно, макрос? Любая помощь будет очень высоко ценится.

+0

Есть ли даты? Или это вообще что-то представляет собой? –

+0

Что-то еще полностью. Я их отформатировал как текст в Excel. – Hubvill

+3

Добавьте вспомогательные столбцы с формулами, разделяющими значения по частям и содержащие каждую часть соответственно. Сортируйте всю таблицу сначала по первой части, по второй части и, наконец, по столбцу третьей части. – omegastripes

ответ

0

Разделить текст на «-» в столбцы.

Сортировка данных по колонкам: 1, 3 и 2. В столбце 4. добавить формулу конкатенировать текст из трех столбцов в одну строку;)

Это все!

Вот простой макрос. Заполните бесплатно, чтобы изменить его:

Sub Macro1() 
    Dim rng As Range, lstRow As Integer 

    Set rng = ActiveSheet.UsedRange 
    lstRow = rng.Rows.Count 

    rng.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ 
     Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar:="-", _ 
     FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True 
    ActiveSheet.UsedRange.Select 
    ActiveSheet.Sort.SortFields.Clear 
    ActiveSheet.Sort.SortFields.Add Key:=Range("A1:A" & lstRow) _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    ActiveSheet.Sort.SortFields.Add Key:=Range("C1:C" & lstRow) _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    ActiveSheet.Sort.SortFields.Add Key:=Range("B1:B" & lstRow) _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With ActiveSheet.Sort 
     .SetRange Range("A1:C" & lstRow) 
     .Header = xlGuess 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
     .Apply 
    End With 

    Set rng = ActiveSheet.Range("D1") 
    rng.Formula = "=CONCATENATE(A1,""-"",B1,""-"",C1)" 
    rng.AutoFill ActiveSheet.Range("D1:D" & lstRow) 

    'now you can copy sorted data whatever you want ;) 

    Set rng = Nothing 

End Sub 

Примечание: перед тем, как использовать выше макрос, убедитесь, что существует данные в одном столбце: А - в данном случае.

Cheers, Maciej

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