我有大量带有“dd-mm-yyyy”形式的日期列的excel表。我需要按此日期列中的日期对行进行排序。如果我手动选择该列并将所有“-”替换为“/”,则 Excel 会自动将日期单元格从“常规”格式化为“日期”数字格式,以便轻松排序。具体来说,它是“*dd/mm/yyyy”,因为我在澳大利亚。
但是,当我录制宏时,它看起来像这样:
Range("D13:D134").Replace What:="-", Replacement:="/", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
当我运行宏时:
之前:
之后:
我尝试将 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
最佳答案
对你起作用吗?
On Error Resume Next
For x = 13 To 134
If Range("D" & x) <> "" Then
Range("D" & x) = CDate(Range("D" & x).Value)
End If
Next x
On Error GoTo 0
关于excel - 覆盖单元格excel VBA的重新格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54157224/