如何将Excel文本转换为日期和时间

如何将Excel文本转换为日期和时间,excel,vba,Excel,Vba,我的一个Excel列包含如下数据:2011年2月15日凌晨2:00:00。我需要将其转换为两列:日期和时间。我尝试了Cdate,DateValue,留下的函数都给出了类型不匹配错误。请提供帮助。要将一个日期时间字符串转换为两个单独的字符串: Public Sub splitDateTime() Dim d As String, t As String d = DateValue("2/15/2011 2:00:00 AM") t = TimeValue("2/15/2

我的一个Excel列包含如下数据:
2011年2月15日凌晨2:00:00
。我需要将其转换为两列:日期和时间。我尝试了
Cdate
DateValue
,留下的函数都给出了类型不匹配错误。请提供帮助。

要将一个日期时间字符串转换为两个单独的字符串:

Public Sub splitDateTime()

    Dim d As String, t As String

    d = DateValue("2/15/2011 2:00:00 AM")
    t = TimeValue("2/15/2011 2:00:00 AM")

    MsgBox d    '"2/15/2011"  (result format varies based on Regional Settings)
    MsgBox t    '"2:00:00 AM"

End Sub
要将包含DataTime字符串的列中的所有单元格转换为2列(标题除外),请执行以下操作:

Option Explicit

Public Sub splitDateTime()
    Dim str As String, cel As Range, ws As Worksheet, lr As Long

    Set ws = ActiveSheet
    lr = ActiveSheet.UsedRange.Rows.Count

    Application.ScreenUpdating = False
    For Each cel In ws.Range("C1:C" & lr)
        If cel.Row = 1 Then
            With cel
                .Value2 = "Date"
                .Offset(0, 1).Value2 = "Time"
            End With
        Else
            str = cel.Value2
            With cel
                .Value2 = Format(DateValue(str), "ddd, mmm dd yyyy")
                .Offset(0, 1).Value2 = Format(TimeValue(str), "hh:mm:ss AmPm")
            End With
        End If
    Next
    ws.Range("C1:D" & lr).EntireColumn.AutoFit
    Application.ScreenUpdating = True
End Sub

要将一个日期时间字符串转换为两个单独的字符串,请执行以下操作:

Public Sub splitDateTime()

    Dim d As String, t As String

    d = DateValue("2/15/2011 2:00:00 AM")
    t = TimeValue("2/15/2011 2:00:00 AM")

    MsgBox d    '"2/15/2011"  (result format varies based on Regional Settings)
    MsgBox t    '"2:00:00 AM"

End Sub
要将包含DataTime字符串的列中的所有单元格转换为2列(标题除外),请执行以下操作:

Option Explicit

Public Sub splitDateTime()
    Dim str As String, cel As Range, ws As Worksheet, lr As Long

    Set ws = ActiveSheet
    lr = ActiveSheet.UsedRange.Rows.Count

    Application.ScreenUpdating = False
    For Each cel In ws.Range("C1:C" & lr)
        If cel.Row = 1 Then
            With cel
                .Value2 = "Date"
                .Offset(0, 1).Value2 = "Time"
            End With
        Else
            str = cel.Value2
            With cel
                .Value2 = Format(DateValue(str), "ddd, mmm dd yyyy")
                .Offset(0, 1).Value2 = Format(TimeValue(str), "hh:mm:ss AmPm")
            End With
        End If
    Next
    ws.Range("C1:D" & lr).EntireColumn.AutoFit
    Application.ScreenUpdating = True
End Sub

这是我的代码,它仍然给出了类型不匹配错误。Option Explicit Sub splitDateTime()Dim cvalue Dim curr_date As String Columns(“C”)。选择cvalue=Columns(“C”)。Value curr_date=DateValue(cvalue)MsgBox curr_date End Sub提供的代码旨在向您展示如何执行此操作的示例。请将您的问题编辑得更具体一些,比如“我需要将C列中的所有单元格从完整的日期和时间格式拆分为日期值,将C列中的每个单元格和时间值拆分为D列中的相应单元格”我确实测试了您的代码,它工作得非常完美。然而,在我的例子中,C列承载日期时间数据,如2011年2月14日凌晨2:00:00。我编辑了答案,将C列拆分为C列和D列。请调整代码以满足您的具体要求,因为您没有提到第二列应该是我的代码,它仍然会给出类型不匹配错误。Option Explicit Sub splitDateTime()Dim cvalue Dim curr_date作为字符串列(“C”)。选择cvalue=列(“C”)。Value curr_date=DateValue(cvalue)MsgBox curr_date End子提供的代码旨在向您展示如何执行此操作的示例。请将您的问题编辑得更具体一些,比如“我需要将C列中的所有单元格从完整的日期和时间格式拆分为日期值,将C列中的每个单元格和时间值拆分为D列中的相应单元格”我确实测试了您的代码,它工作得非常完美。然而,在我的例子中,C列承载日期时间数据,如2011年2月14日凌晨2:00:00。我编辑了答案,将C列拆分为C列和D列。请调整代码以符合您的具体要求,因为您没有提到第二列应该是什么