我有一个Excel文件,它包含多个工作表的数据。在那一列有时间戳,如21/6/12 10:33:07:AM。我的系统日期格式为“m / d / yyyy”
将此转换为日期21/06/2012。能够得到日期,但它显示错误。 06-12-2021这应该是21-06-2012。我正在使用以下代码。
Ex: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
请帮助您了解如何获取日期 提前谢谢。
答案 0 :(得分:2)
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
答案 1 :(得分:0)
如果列格式化日期,Excel将自动更改为26/6/12至26/06/2012。所以
ParseDateTime = Left(datcol, x)
应该这样做。