有一个Excel文件,其中包含多张工作表中的数据。在那一列中,时间戳记类似于21/6/12 10:33:07:AM。我的系统日期格式为“ m / d / yyyy”
,将其转换为Date 21/06/2012。能够获取日期,但显示有误。06-12-2021这应该是21-06-2012。我正在使用以下代码。
例如:26/6/12 11:15:07:AM应为26/06/2012
21/6/12 10:33:07:AM应为21/06/2012
Public Sub ConvtDate()
Dim ParseDateTime As Date
Application.ScreenUpdating = False
For Each datcol In ws_Raw2.Range("I2:I65536")
x = InStr(1, datcol, " ", vbTextCompare) - 1
If x > 0 Then
ParseDateTime = DateValue(Left(datcol, x))
datcol.Value = ParseDateTime
End If
Next
Application.ScreenUpdating = True
End Sub
请帮助如何获取日期。
提前致谢。
DateValue
期望日期是系统设置的格式的字符串。
从Excel帮助中:
如果date是仅包含由有效日期分隔符分隔的数字的字符串,则DateValue根据为系统指定的“短日期”格式识别月,日和年的顺序。
由于您的数据已输入Day Month Year
并且系统已存在,因此Month Day Year
您将需要重建传递给的参数DateValue
。
这是对男女同校的重构,还处理其他一些问题:
Dim
您所有的变量(用于Option Explicit
强制执行此操作)Public Sub ConvtDate()
Dim ParseDateTime As Date
Dim i As Long
Dim x As Long
Dim a() As String
Dim dat As Variant
Dim rng As Range
Application.ScreenUpdating = False
Set rng = Range(Cells(2, 9), Cells(Rows.Count, 9).End(xlUp))
dat = rng.Value
For i = 1 To UBound(dat, 1)
x = InStr(1, dat(i, 1), " ", vbTextCompare) - 1
If x > 0 Then
a = Split(Left(dat(i, 1), x), "/")
ParseDateTime = DateValue(a(1) & "/" & a(0) & "/" & a(2))
' or if you dont know the system data format use
' ParseDateTime = DateSerial(a(2), a(1), a(0))
dat(i, 1) = ParseDateTime
End If
Next
rng = dat
Application.ScreenUpdating = True
End Sub
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句