VBA - 检查日期字符串有效性

时间:2015-12-07 07:25:46

标签: excel vba excel-vba date

我在Excel中有以下格式的字符串。

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

我想检查当前日期是否适合两者(这些日期是有效日期,这意味着我必须检查当前日期是否大于第一个日期并且小于第二个日期)。

我有时也会有这个字符串没有时间,所以像:

07/12/2015 - 08/12/2015

所以我也必须检查一下(只是没有时间)。

我使用拆分功能拆分日期,用“ - ”字符拆分。但是,我不确定如何进行检查,因为我从未使用过日期。

有人能告诉我怎么做吗?对于小时数的检查似乎很复杂。

4 个答案:

答案 0 :(得分: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)) ...

答案 1 :(得分:0)

假设您的String位于A1,并且您要检查的日期是B1,那么将此公式放在C1中:

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

这适用于这两种情况,如果您只对日期介于日期之间感兴趣(因此不包括时间)。

答案 2 :(得分:0)

使用cdate函数。你写过你已经使用了split函数,所以你需要做的就是使用cdate将单独的日期字符串放入日期变量中('c'代表强制转换)。 所以

Dim d1 as Date
Dim d2 as Date

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

然后你可以检查给定的日期。

答案 3 :(得分: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