我有一堆日期,它们都是英国格式,但用点分隔,而不是正斜杠。
每次我运行宏以破折号替换点并使用下面的代码行时,excel似乎总是认为月份和日期是相反的
Replace What:=".", Replacement:="/"
NumberFormat = "dd/mm/yyyy"
例如: 03.07.18 尽管格式为英国,但仍将变为07/03/2018。
如何保持日期为03/07/2018
答案 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
用.
分成三部分。
因此,您最终在数组中使用了03
,07
和18
。
可能更容易理解为:
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 更改“ 。”:
代码:
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
结果:
答案 2 :(得分:0)
替换后,您可以尝试清除日期格式并应用NumberFormat方法:
.Range(yourRange).ClearFormats
.Range(yourRange).NumberFormat = "dd/mm/yyyy"