【发布时间】: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 中的日期只是一个数字,其中整数部分是天,小数部分是小时、分钟和秒。这是通用的,无论位置如何。如果您无法成功对日期进行排序,那么您的自定义排序肯定存在根本问题。