Как отсортировать тип данных даты?

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

Private Sub sortData()

Worksheets(Me.Combobox1.Value).Range("A1:F1", Range("A1:F1").End(xlDown)).Sort
 Key1:=Range("A1"), Order1:=xlAscending, Header:=xlYes
End Sub

Чтобы решить алгоритмическую задачу, нужно сначала понять алгоритм. Какой алгоритм оправдает ваши ожидания? Решите это сначала на листе бумаги; тогда вы будете в гораздо лучшем положении для написания кода.

Robert Harvey 26.12.2020 00:41

Я сделал несколько аранжировок. Все еще не работает

Eduardo Urbiola 26.12.2020 00:59

Ваши так называемые даты на самом деле представляют собой строки, которые выглядят только как даты. Они будут сортироваться иначе, чем фактические даты. Правильное решение — исправить свои данные, превратив их в настоящие даты

chris neilsen 26.12.2020 02:38

Все они относятся к типу данных даты

Eduardo Urbiola 26.12.2020 02:59

Нет, не знают. Если бы это были реальные даты, ваш код работал бы правильно. Щелкните ячейку A1 и посмотрите на значение в строке выражений. Что там сказано?

Ken White 26.12.2020 03:03

@KenWhite Это, очевидно, General A1, потому что это название. A2 и т. д. Дата

Eduardo Urbiola 26.12.2020 03:04

Я просто скопировал и вставил ваш пример с 30 ячейками и изменил «A1: F1» на «A1: C10». Он упорядочил все строки по дате правильно.

Marcelo Scofano Diniz 26.12.2020 03:12

У меня есть больше данных, кроме столбца C, но все равно не работает

Eduardo Urbiola 26.12.2020 03:36

Вполне возможно иметь текстовую строку в ячейке, отформатированную как «Дата» или «Общие». Пожалуйста, выполните тест, предложенный @Ken White: выберите любую из ваших дат и отформатируйте ее ячейку как число. Если вы видите число, это настоящая дата. Если вы продолжаете видеть ту же самую «дату», это подделка.

Variatus 26.12.2020 04:04

@KenWhite прав; нет никакого способа отсортировать ваши текстовые даты как дату/время, если они не были исправлены или преобразованы, и два «ответа» ниже вам не помогут.

Gustav 26.12.2020 10:07

Это возможно с DataOption:=xlSortTextAsNumbers

Eduardo Urbiola 30.12.2020 21:32
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
11
128
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Как начал говорить @Marcelo Scofano Diniz, когда вы сталкиваетесь с проблемой, забудьте о сокращении и следуйте правилам. Вот книга.

Private Sub SortByDate()
    
    Dim Ws              As Worksheet
    Dim SortRange       As Range
    
    Set Ws = Worksheets(Me.ComboBox1.Value)
    With Ws
        Set SortRange = .Range(.Cells(1, 1), .Cells(.Rows.Count, "A").End(xlUp)) _
                        .Resize(, 6)
        With .Sort.SortFields
            .Clear
            .Add2 Key:=SortRange.Cells(1), _
                  SortOn:=xlSortOnValues, _
                  Order:=xlAscending, _
                  DataOption:=xlSortNormal
        End With
        
        With .Sort
            .SetRange SortRange
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub

Приведенный выше код будет выполнять сортировку, которую вы говорите, что ваш код не будет выполнять. Если даты являются истинными датами, они будут отсортированы по дате. Если это поддельные даты, они будут отсортированы как текст. И если у вас есть сомнения по поводу какой-либо части кода, вы можете увидеть, что делается, и выполнить его построчно.

Это сработало! Спасибо! Примечание. Если даты не будут истинными значениями дат, это можно легко исправить, написав dataOption следующим образом: DataOption:=xlSortTextAsNumbers

Eduardo Urbiola 30.12.2020 21:28

Изменить диапазон на таблицу имен Tbl затем создайте:

Sub Table_Sort(byval FieldNo as Integer)
    Tbl.Sort.SortFields.Clear
    FieldRange(FieldNo).Select
       Tbl.Sort.SortFields.Add _
   Key:=FieldRange(FieldNo), SortOn:=xlSortOnValues, Order:= _
   xlAscending, DataOption:=xlSortNormal

   With Tbl.Sort

   .Header = xlYes
   .MatchCase = False
   .Orientation = xlTopToBottom
   .SortMethod = xlPinYin
   .Apply
   
   End With

End Sub

Другие вопросы по теме