VBA сортировать строки по датам - PullRequest
0 голосов
/ 14 марта 2019

У меня есть файл, содержащий даты в первой строке, и столбец идентификаторов, определяющий таблицу, в которой я заполняю данные сотрудника для соответствующих данных (см. Рисунок) enter image description here

Я хочу, чтобы даты сортировались в хронологическом порядке, но я хочу отсортировать только даты, прежде чем заполнять таблицу.

Я попробовал следующий код

Sub sortByDates()

    Dim sumSheet as Worksheet
    Dim toSort as Range

    Set sumSheet = ThisWorkbook.ActiveSheet
    LastCol = sumsheet.Cells.Find(What:="*", After:=[a1], _
              SearchOrder:=xlByColumns, 
              SearchDirection:=xlPrevious).Column
    Set toSort = sumsheet.Rows(1).Resize(1, LastCol - 1).Offset(0, 1)

    toSort.Select
    ActiveWorkbook.Worksheets("Employees").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Employees").Sort.SortFields.Add Key:=toSort, SortOn:=xlSortOnValues, Order:=xlAscending, _
     DataOption:=xlSortNormal

    With ActiveWorkbook.Worksheets("Employees").Sort
        .SetRange toSort
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlLeftToRight
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Однако даты перемещаются, но не упорядочиваются, как я хочу.Я думаю, что это может быть связано с тем, что сортировка Excel не знает, как обрабатывать формат даты, но не уверен.

1 Ответ

1 голос
/ 14 марта 2019

Вы должны определить формат данных для сортировки.После этой строки в вашем коде, toSort.Select, добавьте эту команду:

Selection.NumberFormat = "[$-409]d-mmm-yy;@"

(измените формат на тот, который вы используете)

Вот код, который я использовал и тестировал: Iправильно отсортировали столбцы (измените feuil1 на имя вашего листа)

Sub sortByDates()

Dim sumSheet As Range
Dim toSort As Range

'Set sumSheet =
LastCol = ThisWorkbook.ActiveSheet.Cells.Find(What:="*", After:=[a1], SearchOrder:=xlByColumns, SearchDirection:=xlPrevious).Column
Set toSort = ThisWorkbook.ActiveSheet.Rows(1).Resize(1, LastCol - 1).Offset(0, 1)

toSort.Select
Selection.NumberFormat = "[$-409]d-mmm-yy;@"
ActiveWorkbook.Worksheets("feuil1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("feuil1").Sort.SortFields.Add Key:=toSort, SortOn:=xlSortOnValues, Order:=xlAscending, _
 DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("feuil1").Sort
    .SetRange toSort
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlLeftToRight
    .SortMethod = xlPinYin
    .Apply
End With

End Sub

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