使用查找/替换后Excel日期格式更改

时间:2018-06-27 11:58:04

标签: excel vba excel-vba date

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

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

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

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

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

3 个答案:

答案 0 :(得分:3)

您可以尝试拆分为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

答案 1 :(得分:1)

更容易以格式而不是 value 更改“ ”:

enter image description here

代码:

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

结果:

enter image description here

答案 2 :(得分:0)

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

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