2015-12-07 34 views
0

我在Excel中有以下格式的字符串。VBA - 檢查日期字符串的有效性

07/12/2015 08:00 - 08/12/2015 09:00 

我要檢查,如果當前日期間符合兩(這些日期是有效日期,這意味着我要檢查,如果當前日期比第一個日期比第二個日期越做越小)。

我有時也有這個字符串沒有時間,所以像:

07/12/2015 - 08/12/2015 

,所以我必須檢查以及(只是沒有時間)。


我使用分割功能分割日期以「 - 」字符分割。但是,我不知道如何執行檢查,因爲我從未使用過日期。

任何人都可以告訴我如何做到這一點?看起來它會因檢查時間而變得複雜。

+1

@Synoon,他需要解析的日期,而不是格式化。 – Qwertiy

回答

0

你可以試試這個:

Dim mydate as String, splitdate as Variant 
mydate = "07/12/2015 08:00 - 08/12/2015 09:00" 

splitdate = Split(mydate, "-") 
If Date < splitdate(0) And Date > splitdate(1) Then MsgBox "Is Between" 

在情況下會出現與理解日期格式的一些問題,你仍然可以使用CDate函數 -

If Date < CDate(splitdate(0)) ... 
0

假設,你的字符串位於A1,你想檢查的日期是B1,然後把這個公式放在C1中:

=IF(AND(B1>=DATEVALUE(LEFT(A1,10)),B1<=DATEVALUE(MID(A1,FIND("-",A1)+2,10))),TRUE,FALSE) 

這項工作這兩種情況下,如果你只是有興趣的日期之間的日期(因此排除時間)。

0

使用cdate函數。你寫過你已經使用過split函數,所以你需要做的就是使用cdate將單獨的日期字符串放入日期變量中('c'代表cast)。 所以

Dim d1 as Date 
Dim d2 as Date 

d1 = CDate(splitstring(0)) 
d2 = CDate(splitstring(1)) 

然後你可以檢查給定的日期。

0

隨着CDate()轉換函數和Trim(擺脫無用空格),這裏是一個布爾函數,您可以輕鬆地使用它來測試您是否處於字符串所描述的時間間隔內。

這裏是如何使用它:

Sub test_Gilbert_Williams() 
Dim TpStr As String 
TpStr = "08/12/2015 08:00 - 08/12/2015 09:00" 
'TpStr = "07/12/2015 - 08/12/2015" 

MsgBox Test_Now_Date_Validity(TpStr) 
End Sub 

而且功能:

Public Function Test_Now_Date_Validity(Date_Lapse As String) As Boolean 
Dim A() As String, _ 
    Date1 As Date, _ 
    Date2 As Date 

If InStr(1, Date_Lapse, "-") Then 
    A = Split(Date_Lapse, "-") 
    Debug.Print Trim(A(0)) & " " & CDate(Trim(A(0))) 
    Debug.Print Trim(A(1)) & " " & CDate(Trim(A(1))) 
    If CDate(A(0)) > CDate(A(1)) Then 
     Date1 = CDate(A(1)) 
     Date2 = CDate(A(0)) 
    Else 
     Date1 = CDate(A(0)) 
     Date2 = CDate(A(1)) 
    End If 
    If Now > Date1 And Now < Date2 Then 
     Test_Now_Date_Validity = True 
    Else 
     Test_Now_Date_Validity = False 
    End If 
Else 
    Exit Function 
End If 
End Function