【问题标题】:How to sort date data type?如何对日期数据类型进行排序?
【发布时间】:2021-04-03 17:55:51
【问题描述】:

我一直在尝试对 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

【问题讨论】:

  • 您所谓的日期实际上是看起来像日期的字符串。这些将与实际日期不同。正确的解决方案是修复您的数据,将其转化为真实日期
  • 不,他们没有。如果它们是实际日期,那么您的代码将正常工作。单击单元格 A1,然后查看表达式栏中的值。上面写了什么?
  • 我只是复制并粘贴您的 30 个单元格示例并将“A1:F1”修改为“A1:C10”。它按日期正确排序了所有行。
  • 完全有可能在单元格中包含格式为 DateGeneral 的文本字符串。请进行@Ken White 建议的测试:选择任何日期并将其单元格格式化为 Number。如果你看到一个数字,那就是一个真实的日期。如果您继续看到相同的“日期”,那就是假的。
  • @KenWhite 是对的;只要没有更正或转换这些日期/时间,就无法将文本日期排序为日期/时间,下面的两个“答案”也不会帮助您。

标签: excel vba sorting range


【解决方案1】:

正如@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
【解决方案2】:

将范围更改为名称 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-26
    • 2011-09-08
    • 2019-01-17
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-15
    相关资源
    最近更新 更多