【问题标题】:Excel Date Formatting changes after using Find/Replace使用查找/替换后 Excel 日期格式更改
【发布时间】:2018-12-06 07:36:16
【问题描述】:

我有一卷日期是英国格式,但用点而不是正斜杠分隔。

每次我运行宏用破折号替换点并使用下面的代码行时,excel似乎总是认为月份和日期是相反的

Replace What:=".", Replacement:="/"
NumberFormat = "dd/mm/yyyy"

例如: 03.07.18 尽管格式为英国,但仍将变为 07/03/2018。

如何将日期保持为 03/07/2018

【问题讨论】:

标签: vba excel date


【解决方案1】:

你可以尝试拆分成DateSerial

Sub Test()

    Dim r As Range
    Set r = Sheet1.Range("B10")

    r = DateSerial(Split(r, ".")(2), Split(r, ".")(1), Split(r, ".")(0))

    r.NumberFormat = "dd/mm/yyyy"

End Sub

拆分returns a zero-based, one-dimensional array containing a specified number of substrings.

这在简单的英语中意味着它将您的文本字符串 03.07.18 并使用 . 将其分成三个部分。
所以你最终会在一个数组中得到030718

可能更容易理解为:

v = Split(r, ".")
r = DateSerial(v(2), v(1), v(0))

DateSerial 接受三个数字(年、月和日)并返回一个日期。将拆分的三个部分传递到此以创建日期。

要处理多个单元格,请使用:

Sub formatfixer()
    Dim r As Range
    For Each r In Range("H5:H120")
        r = DateSerial(Split(r, ".")(2), Split(r, ".")(1), Split(r, ".")(0))
        r.NumberFormat = "dd/mm/yyyy"
    Next r
End Sub

【讨论】:

  • 这行得通!我不知道这是什么意思,但谢谢!
  • 这似乎是一个愚蠢的问题,但我想对 Range H5:H120 重复这个问题。我将上面的代码从 (“B10”) 更改为 (“H5:H120”),但它不起作用?想法?
  • 这很有效,感谢您扩展您的答案。顶级人物
【解决方案2】:

格式更容易改变“.”:

代码:

Sub formatfixer()
    Dim r As Range, formt As String
    For Each r In Intersect(Selection, ActiveSheet.UsedRange)
        formt = r.NumberFormat
        If InStr(1, formt, ".") > 0 Then
            r.NumberFormat = "dd/mm/yyyy"
        End If
    Next r
End Sub

结果:

【讨论】:

    【解决方案3】:

    替换后,可以尝试清除日期格式并应用NumberFormat方法:

    .Range(yourRange).ClearFormats
    .Range(yourRange).NumberFormat = "dd/mm/yyyy"
    

    【讨论】:

      猜你喜欢
      • 2016-09-03
      • 2016-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      相关资源
      最近更新 更多