【问题标题】:How to sort General date format? [duplicate]如何对通用日期格式进行排序? [复制]
【发布时间】:2023-03-14 09:06:01
【问题描述】:

我有一个看起来像这样的数据表,一般格式:

Date
01.02.2020
02.01.2020
01.02.2021
02.01.2021

我需要按时间顺序对其进行排序并保持格式 dd.mm.yyyy 。它应该适用于德国、美国等所有系统......

使用此代码会打乱排序(按 dd 排序而不是按时间顺序排序):

Set ws = ActiveWorkbook.Worksheets(1)
ws.Range("A2", ws.Range("A2").End(xlDown)).NumberFormat = "dd.mm.yyyy"

    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("A1", Range("A1").End(xlDown))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

任何想法,我该如何实现?非常感谢!

【问题讨论】:

  • 也许尝试按数字值而不是日期格式值排序?这样日期必须按时间顺序排列,并且可以以 dd/mm/yyyy 格式显示在工作表上?
  • 日期只是数字。如果您应用了通用格式,但它仍然看起来像一个日期,那么您实际上并没有一个日期,您有一个看起来像日期的文本。
  • 格式和基础值是分开的。 .NumberFormat = "dd.mm.yyyy" 不会转换基础值,它仍然是文本。
  • Excel 中的日期只是一个数字,其中整数部分是天,小数部分是小时、分钟和秒。这是通用的,无论位置如何。如果您无法成功对日期进行排序,那么您的自定义排序肯定存在根本问题。

标签: vba date sorting


【解决方案1】:

我终于找到了一个不错且有效的解决方案,我从@Siddharth Rout 这里得到: https://stackoverflow.com/questions/67315273/can-cdate-be-used-on-a-range-without-a-for-l[oop][1]

    Dim rng As Range
    Dim sAddr As String
    Dim lRow As Long
    Dim ws As Worksheet

    With ws
        lRow = .Range("A" & .Rows.Count).End(xlUp).Row
        
        Set rng = .Range("A:A" & lRow)
        sAddr = rng.Address

        rng = Evaluate("index(DATE(RIGHT(" & sAddr & _
                       ",4),MID(" & sAddr & ",4,2),LEFT(" & _
                       sAddr & ",2)),)")
        End With
        
    With ws.Sort
        .SortFields.Add Key:=ws.Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange rng
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    rng.NumberFormat = "dd.mm.yyyy;@"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    相关资源
    最近更新 更多