excel - 覆盖单元格excel VBA的重新格式化

标签 excel vba

我有大量带有“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 天或更少,则翻转日期和月份字段并将数字格式更改为日期
  • 否则,它将数字格式保留为常规。

  • 之前:BEFORE
    之后:AFTER
    我尝试将 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/

    相关文章:

    excel - 我可以使用数组来使用 like 运算符比较多个条件吗?

    python - Pandas 格式列多张

    excel - 如何在excel中选择包含相同值的最后一个单元格

    excel - 每个循环的 VBA 包含 64K+ ListRows(内存不足)

    excel - 当用户输入超过预期的参数时,强制 VBA 中的 UDF 显示 MsgBox?

    Excel 不会在工作簿关闭时释放内存

    html - 填充 html 自动搜索框并获取结果

    excel - 命名多个范围 - 使用两列中的数据

    python - Pandas 两个excel列比较中的一对多比较?

    excel - 使用基于单元格值的excel VBA打开文件,路径由相同的值动态组成