2015-12-07 2 views
0

У меня есть строка в следующем формате в Excel.VBA - Действительность строки проверки даты

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

Я хочу, чтобы проверить, если текущая дата находится между двумя (эти даты сроки действия, то есть я должен проверить, если текущая дата больше, чем первая дата и меньше, чем вторая дата).

Я иногда также имеют эту строку без часов, так как:

07/12/2015 - 08/12/2015 

так что я должен проверить, что хорошо (только без часов).

Я разделил даты, используя функцию Split, чтобы разделить символ «-». Однако я не уверен, как сделать чек, потому что я никогда не работал с датами.

Может ли кто-нибудь показать мне, как это сделать? Похоже, что это будет сложно с проверкой часов.

+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) 

Эта работа s для обоих случаев, если вас интересует только, если дата находится между датами (таким образом, исключая время).

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 
Смежные вопросы