Как отсортировать столбец с конкретными данными, разделенными / - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь отсортировать столбец с данными, подобными этому:

input:

11/2
11/3a
11/2b
3/1
2/5
2/8
3/5

как это должно быть отсортировано:

2/5
2/8
3/1
3/5
11/2
11/2b
11/3b

ячейка всегдав формате № 1 / № 2 [необязательная буква]

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

1 Ответ

1 голос
/ 23 октября 2019

Метод 1 - Excel

Создание двух вспомогательных столбцов (столбец B и столбец C)

Формула столбца B: =LEFT(A1,FIND("/",A1)-1)

СтолбецФормула C: =MID(A1,(FIND("/",A1)+1),(LEN(A1)-(FIND("/",A1))))

Выберите все три столбца и выполните приведенную ниже часть для пользовательской сортировки

Домой - Редактирование - Сортировка и фильтрация - Пользовательская сортировка - Добавить уровень

Сортировка:

enter image description here

Метод 2 - VBA

Option Explicit

Sub test()

    Dim LastRowA As Long, i As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row

        For i = 1 To LastRowA

            .Range("B" & i).Value = Split(.Range("A" & i).Value, "/")(0)
            .Range("C" & i).Value = Split(.Range("A" & i).Value, "/")(1)

        Next i

        .Sort.SortFields.Clear
        .Sort.SortFields.Add2 Key:=Range("B1:B" & LastRowA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.SortFields.Add2 Key:=Range("C1:C" & LastRowA), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal

        With .Sort
            .SetRange Range("A1:C" & LastRowA)
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

    End With

End Sub

Результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...