如何在 VBA 中查找日期之间的差异
Posted
技术标签:
【中文标题】如何在 VBA 中查找日期之间的差异【英文标题】:How to find the difference between dates in VBA 【发布时间】:2012-01-03 12:04:23 【问题描述】:我试图找出系统日期和工作表中存储的日期之间的差异。如果它们之间的差异> 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
如何找出系统日期和工作表中存储的日期之间的天数差异?工作表中的日期也可以是过去的日期。
【问题讨论】:
电子表格中的日期值如何存储?即 2010 年 4 月 1 日、2010 年 1 月 30 日等 【参考方案1】:我想知道为什么我很少看到人们使用日期函数。
你也可以这样用:
if DateDiff("d", date1, date2) > 30 then
在这种情况下,date1 将是 CDate(Worksheets("dates").Cells(1,1)) 并且 date2 将是 sdate(如 Jeff 所说,使用 CDate 或调暗作为日期。
“d”表示我们在几天内得到了差异。以下是 VBA 中年、月等的间隔:
yyyy - Year
q - Quarter
m - Month
y - Day of year
d - Day
w - Weekday
ww - Week
h - Hour
n - Minute
s - Second
【讨论】:
【参考方案2】:sDate 是一个字符串,它不是一个真实的日期!
使用 CDate() 函数或 DateValue() 函数将字符串转换为日期。
但是,这种转换有一个警告。这些转换将处理以下结构:
yyyy/mm/dd
yyyy/m/d
mm/dd/yyyy
m/d/yyyy
这些将无法正确转换
dd/mm/yyyy
d/m/yyyy
并避免使用任何两位数的年份。
我建议使用 DateSerial() 函数进行日期转换。
因此,关于您的代码,假设您工作表上的值实际上是日期(可以肯定的是,只需选择该列并将数字格式更改为 GENERAL。如果它们是真实日期,每个将显示一个 PURE NUMBER。记住点击 UNDO 以恢复您的日期格式)
Dim result As Boolean
If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then
result = True
Else
result = False
End If
【讨论】:
【参考方案3】:试试这个:
if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then
【讨论】:
CDate(Worksheets("dates").Cells(1,1)) 给出类型不匹配! @Ankur - 哦,sDate 也需要是一个日期。我看到它是一个字符串。实际上,如果您将 sDate 更改为日期,那么您可能不需要 CDate 演员表。以上是关于如何在 VBA 中查找日期之间的差异的主要内容,如果未能解决你的问题,请参考以下文章