是否可以在Excel中将以下文本格式化为日期和时间格式?我没有尝试的方法。
Fri, November 16 2018 8:00 PM
我尝试做以下事情,但是没有运气。
=TEXT("Fri, November 16 2018 8:00 PM","ddd, mmm d yyyy h:mm AM/PM")
答案 0 :(得分:1)
您可以创建自己的自定义UDF并将其用作工作表函数:
Public Function myDateToDate(inputRng As Range) As Date
With CreateObject("VBScript.RegExp")
.Pattern = "\w{3},\s(\w+\s\d+\s\d+)\s(\d+:\d+\s\w+)"
If .test(inputRng.Value) Then
With .Execute(inputRng.Value)(0).SubMatches
myDateToDate = CDate(.Item(0)) + CDate(.Item(1))
End With
End If
End With
End Function
这将使用Regular Expressions (RegEx)来获取字符串中的值,并同时捕获日期和时间。由于在Excel中所有日期都是数字,因此可以将第一个捕获组(\w+\s\d+\s\d+)
(代表日期)和第二个捕获组(\d+:\d+\s\w+)
(代表时间)加在一起。 (请参阅正则表达式模式here的工作原理)。
完成此操作后,现在可以通过使用工作表公式=myDateToDate(A1)
使用新创建的UDF-其中A1
将替换为包含日期的单元格/字符串。
如何访问VBE?
在工作簿中时,按 Alt + F11 可以访问VBE。好的,所以我打开了VBE。现在如何应用此Sub / UDF?
在左窗格中,您将看到您的工作簿对象模块。这称为项目资源管理器。您将需要创建一个新模块,可以通过right-clicking inside the Project Explorer > Insert > Module
:现在您可以将Sub / UDF粘贴到此新模块中,一切就绪!
答案 1 :(得分:1)
如果要避免使用VBA,则需要使用DATEVALUE
和TIMEVALUE
函数。不幸的是,这些函数不够聪明,无法转换您描述的文本,但是在输入这些函数之前,您仍然可以使用单元格公式拆分文本。
下面的公式会将文本Fri, November 16 2018 8:00 PM
转换为日期/时间值(假设文本位于单元格A1中)。
=DATEVALUE(SUBSTITUTE(MID(A1, FIND(" ",A1)+1, FIND("|", SUBSTITUTE(A1," ","|",4))-FIND(" ",A1)), " ", ", ", 2)) + TIMEVALUE(RIGHT(A1, LEN(A1)-FIND("|", SUBSTITUTE(A1," ","|",4))))
答案 2 :(得分:1)
一个怪物,但应该是独立于语言环境的(美国或英国):
=DATE(LEFT(RIGHT(A1,13),5),MONTH(DATEVALUE(LEFT(MID(A1,6,9),FIND(" ",MID(A1,6,10)))&"1")),MID(MID(A1,FIND(" ",A1)+1,99),FIND(" ",MID(A1,FIND(" ",A1)+1,99))+1,2))+LEFT(TRIM(RIGHT(A1,8)),7)
答案 3 :(得分:0)
上面不错的正则表达式解决方案,您也可以采用其他方式:
Function ConvertToDate(str As String) As Date
Dim arr() As String
arr = Split(str, " ")
ConvertToDate = CDate(arr(3) & "/" & Month("01/" & arr(1) & "/2018") & "/" & arr(2) & " " & arr(4))
End Function