Как найти разницу между датами в VBA - PullRequest
9 голосов
/ 22 ноября 2011

Я пытаюсь выяснить разницу между системной датой и датой, хранящейся в рабочем листе. Если разница между ними> 30 дней, результат равен true, в противном случае - false

Dim result as boolean
Dim sDate as string
sDate = Date
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this?
     result = true
else
     result = false
end if

Как узнать разницу в днях между системной датой и датой, хранящейся в рабочем листе? Дата в таблице также может быть датой прошлого.

Ответы [ 3 ]

26 голосов
/ 22 ноября 2011

Интересно, почему я редко вижу людей, использующих функции даты.

Вы также можете использовать это:

if DateDiff("d", date1, date2) > 30 then

в этом случае date1 будет CDate (Worksheets ("даты"). Ячейки (1,1)) и date2 будет sdate (либо разыгрывается с CDate, либо dim'd как дата, как сказал Джефф.

«d» означает, что мы получаем разницу в днях. Вот интервалы для лет, месяцев и т. Д. В VBA:

yyyy - Year
q - Quarter
m - Month
y - Day of year
d - Day
w - Weekday
ww - Week
h - Hour
n - Minute
s - Second
3 голосов
/ 22 ноября 2011

Попробуйте это:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then
1 голос
/ 23 ноября 2011

sDate - это STRING, а не настоящая дата!

Преобразуйте вашу строку в дату, используя либо функцию CDate (), либо функцию DateValue ().

Однако в этом виде преобразования есть предостережение.Эти преобразования будут обрабатывать следующие структуры:

yyyy/mm/dd
yyyy/m/d
mm/dd/yyyy
m/d/yyyy

Они не будут правильно преобразованы

dd/mm/yyyy
d/m/yyyy

И избегать использования любого двухзначного года.

Я бы посоветовал использовать функцию DateSerial () для преобразования даты.

Что касается вашего кода, предполагая, что значения на вашем листе фактически являются датами (чтобы быть уверенным, просто выберите столбец и измените числоОтформатируйте в ОБЩИЕ. Если они являются реальными датами, у каждой будет отображаться ЧИСТЫЙ НОМЕР. Не забудьте нажать кнопку ОТМЕНА, чтобы вернуть свой формат даты)

Dim result As Boolean

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then
     result = True
Else
     result = False
End If
...