如何将日期时间戳分成2列?

时间:2017-12-14 00:12:17

标签: excel excel-vba vba

我有一个电子表格,其中包含两个不同日期时间格式的列,我试图将其拆分为标准列。这两种格式是这样的:

21/09/2017 7:39
14/07/17 13:47

我已尝试单独拆分日期时间组件,但看起来YEAR功能并不像解析两位数日期一样。作为一个贫民窟的解决方案,我已经做了一个寻找和替换,但这不可持续。那里有哪些excel geniuses有我应该关注的任何想法或功能?

干杯

3 个答案:

答案 0 :(得分:2)

由于你想要对你的问题做出VBA回复,所以就是这样。

您需要对您的范围进行调整,因为这只会从A1开始(您没有指定文本日期的原始范围,也没有指定新日期的范围)和时间)。

Option Explicit

Sub SplitDateAndTime()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets(1)

    Dim RawVal As String, RawDate As String, RawTime As String
    RawVal = ws.Range("A1").Value
    RawDate = Split(RawVal, " ")(0)
    RawTime = Split(RawVal, " ")(1)

    Dim NewDate As Date, NewTime As Date
    NewDate = CDate(RawDate)
    NewTime = CDate(RawTime)

    ws.Range("A1") = NewDate
    ws.Range("B1") = NewTime

End Sub

答案 1 :(得分:1)

请注意,此公式假设您的所有日期都将在2000年之后。如果不是这样,请告诉我,我会想出其他的事情。

看起来您的第一个日期被识别为正确的日期时间,而您的第二个日期是文本值。

以下是我的成果:

Screenshot 1

日期和时间列中都有=IFERROR公式。每个中的第一个公式都采用日期时间格式,第二个公式适用于文本格式,可以向下拖动以处理任何单元格引用。

这是B1中的公式:

=IFERROR(DATE(TEXT(A2,"yyyy"),TEXT(A2,"mm"),TEXT(A2,"dd")), DATE(MID(MID(A2,FIND("/",A2)+1,5),FIND("/",MID(A2,FIND("/",A2)+1,5))+1,2)+2000,MID(A2,FIND("/",A2)+1,2),LEFT(A2,FIND("/",A2)-1)))

这是C1中的公式:

=IFERROR(TIME(TEXT(A2,"hh"),TEXT(A2,"mm"),0),TIME(LEFT(MID(A2,FIND(":",A2)-2,5),FIND(":",MID(A2,FIND(":",A2)-2,5))-1),MID(MID(A2,FIND(":",A2)-2,5),FIND(":",MID(A2,FIND(":",A2)-2,5))+1,256),0))

答案 2 :(得分:1)

假设您的数据位于A列上

,以获取日期
=DATEVALUE(MID(A1,1,FIND(" ",A1)-1))

T0获取时间,假设您的数据在A列上

=TIMEVALUE(MID(A1,FIND(" ",A1)+1,5))