2012-10-18 56 views
2

获取日期如果我有以下的单元:Excel的VBA从一个字符串

Tuesday, April 16th 2009 

如何转换该字符串为用Excel认可的日期格式。我想我必须使用MID()和FIND()函数。

回答

5

这里是将从VBA和用户自定义函数

Function GetDate(InString As Range) As Date 
    Dim newDate As Date 
    Dim tmpDate As String 

    'Sample Date 
    'Tuesday, April 16th 2009 

    'Remove the Day of the Week. 
    tmpDate = Trim(Mid(InString, InStr(InString, ",") + 1)) 

    'Get rid of "th" 
    tmpDate = Replace(tmpDate, "th ", " ") 

    'Get rid of "rd" 
    tmpDate = Replace(tmpDate, "rd ", " ") 

    'Get rid of "nd" 
    tmpDate = Replace(tmpDate, "nd ", " ") 

    'Get rid of "st" 
    tmpDate = Replace(tmpDate, "st ", " ") 

    'Convert string to date 
    newDate = DateValue(tmpDate) 

    GetDate = newDate 
End Function 
+0

+1工作的函数:好的,干净 – SeanC

+0

谢谢,剧本运作良好。我修改是因为在西班牙语中,日期写成不同。例如:'2009年4月16日星期二'为'Martes,2009年4月16日'。所以你可以看到没有'th','rd或者其中任何一个角色。因此,我不是将它们删除,而是更改脚本以删除“de”。像魅力一样工作。 – capm

0

假设文本是在A1中,我们可以将它分解成单独的部分,并使用DATEVALUE将它放在一起。

B1: =MID(A1,FIND(" ",A1)+1,FIND(" ",A1,FIND(" ",A1)+2)-FIND(" ",A1)) 
B2: =IFERROR(VALUE(MID(A1,FIND(" ",A1,FIND(" ",A1)+2),3)),VALUE(MID(A1,FIND(" ",A1,FIND(" ",A1)+2),2))) 
B3: =RIGHT(A1,4) 
B4: =DATEVALUE(B2&" "&B1&" "&B3) 

或者,你可以做到一气呵成:

=DATEVALUE(IFERROR(VALUE(MID(A1,FIND(" ",A1,FIND(" ",A1)+2),3)),VALUE(MID(A1,FIND(" ",A1,FIND(" ",A1)+2),2)))&" "&MID(A1,FIND(" ",A1)+1,FIND(" ",A1,FIND(" ",A1)+2)-FIND(" ",A1))&" "&RIGHT(A1,4))