【问题标题】:How to find the difference between dates in VBA如何在 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 日等

标签: excel date datediff vba


【解决方案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 演员表。
      猜你喜欢
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 2023-04-01
      • 2016-07-11
      • 2011-07-29
      • 2016-03-20
      • 1970-01-01
      • 2016-09-20
      相关资源
      最近更新 更多