【发布时间】:2019-01-14 15:41:16
【问题描述】:
我有大量带有“dd-mm-yyyy”形式的日期列的 Excel 工作表。我需要按此日期列中的日期对行进行排序。如果我手动选择该列并将所有“-”替换为“/”,则 Excel 会自动将日期单元格从“常规”格式化为“日期”数字格式,以便对它们进行轻松排序。具体来说就是“*dd/mm/yyyy”,因为我在澳大利亚。
但是,当我录制宏时,它看起来像这样:
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
当我运行宏时:
如果日期的第 12 天或更少,则翻转日期和月份字段并将数字格式更改为日期
否则将数字格式保留为常规。
之前: 之后: 我尝试将 ReplaceFormat 设置为:
Worksheets("Worksheet").Range("A1").NumberFormat = "d/mm/yyyy"
Application.ReplaceFormat.NumberFormat = "d/mm/yyyy"
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=True
现在所有的单元格都有日期的数字格式,但仍然不能按升序排序(只有 A-Z 选项可用)并且在某些单元格上交换日期和月份字段仍然存在相同的问题。
我什至尝试将 X 附加到单元格的开头,以便在替换期间保持通用格式。然后删除X之后。结果一样。
For x = 13 To 134
Cells(x, 4) = "X" & Cells(x, 4)
Next x
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
For x = 13 To 134
Range("D" + CStr(x)) = Right(Range("D" + CStr(x)), Len(Range("D" + CStr(x))) - 1)
Next x
【问题讨论】: