我有一个电子表格,其中包含两个不同日期时间格式的列,我试图将其拆分为标准列。这两种格式是这样的:
21/09/2017 7:39
14/07/17 13:47
我已尝试单独拆分日期时间组件,但看起来YEAR功能并不像解析两位数日期一样。作为一个贫民窟的解决方案,我已经做了一个寻找和替换,但这不可持续。那里有哪些excel geniuses有我应该关注的任何想法或功能?
干杯
答案 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年之后。如果不是这样,请告诉我,我会想出其他的事情。
看起来您的第一个日期被识别为正确的日期时间,而您的第二个日期是文本值。
以下是我的成果:
日期和时间列中都有=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))