如何在VBA中找到日期之间的差异

时间:2011-11-22 02:13:26

标签: excel-vba date datediff vba excel

我试图找出系统日期与工作表中存储的日期之间的差异。如果它们之间的差异是> 30天,结果为真,否则结果为假

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 个答案:

答案 0 :(得分:26)

我想知道为什么我很少看到人们使用日期函数。

您也可以使用:

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

在这种情况下,date1将是CDate(工作表(“日期”)。单元格(1,1)) 而且日期2将是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

答案 1 :(得分:3)

试试这个:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then

答案 2 :(得分:1)

sDate是一个STRING,这不是一个真实的日期!

使用CDate()函数或DateValue()函数将字符串转换为日期。

但是,这种转换有一个警告。这些转换将处理以下结构:

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

这些将无法正确转换

dd/mm/yyyy
d/m/yyyy

避免使用任何2位数年份。

我建议使用DateSerial()函数进行日期转换。

关于你的代码,假设yor表上的值实际上是日期(确切地说,只需选择列并将数字格式更改为GENERAL。如果它们是实际日期,则每个都将显示一个纯数字。请记住点击UNDO以获取日期格式)

Dim result As Boolean

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