【问题标题】:Difference of dates日期差异
【发布时间】:2026-02-03 14:30:01
【问题描述】:

有两个日期(一个在第二个)。我想知道它们之间的区别(以天为单位)。Programm 产生值“0”。变量 vat1、vat2 中的错误。告诉我,如何正确设置它们?

   Sub ógv()
   Dim dat1 As Date
   Dim dat2 As Date
   Dim vat1 As Date
   Dim vat2 As Date
   Dim Day1 As Long
   Dim Month1 As Long
   Dim Year1  As Long
   Dim Day2 As Long
   Dim Month2 As Long
   Dim Year2  As Long
   Dim C As Range

   Set C = ThisWorkbook.ActiveSheet.Range("C35")
   '1
   dat1 = C.Value
   Day1 = DatePart("d", dat1)
   Month1 = DatePart("m", dat1)
   Year1 = DatePart("yyyy", dat1)
   vat1 = Month1 / Day1 / Year1
   '2
   dat2 = C.Offset(-1, 0).Value
   Day2 = DatePart("d", dat2)
   Month2 = DatePart("m", dat2)
   Year2 = DatePart("yyyy", dat2)
   vat2 = Month2 / Day2 / Year2


    Dni = DateDiff("d", vat2, vat1)
     MsgBox Dni

  End Sub

【问题讨论】:

    标签: excel vba date variables datediff


    【解决方案1】:

    线

    vat1 = Month1 / Day1 / Year1
    

    不符合您的预期。相反,它将Month1 / Day1 除以Year1

    看起来C.ValueC.Offset(-1, 0).Value 都是有效日期。您应该可以将它们用作DateDiff 的参数。

    【讨论】:

    • 如何正确执行 vat1 = Month1 / Day1 / Year1 行?
    • 您不需要这样做。如果C 和相邻的单元格是日期,DateDiff("d", dat2, dat1) 将完成这项工作。如果它们是代表有效日期的字符串,您可以使用 CDate() 解析它们。
    【解决方案2】:

    你让你的生活变得不必要的困难。所有日期都由数字表示,例如 43218.75,其中整数定义日期,小数定义时间。在此示例中,自第 43218 天(2018 年 4 月 28 日)午夜以来已过去 0.75 天。因此 43218.75 代表 2018 年 4 月 24 日下午 6:00。因此 43210.75 将提前 8 天,因此 43218.75 - 43210.75 将是日期差(以天为单位)。使用 Int() 函数从日期/时间值中提取日期。

    CDate() 函数从字符串或数字中提取日期。因此,如果您的范围 C35 包含真实日期(作为数字)或字符串,例如“24/4/2018”CDate(Range("C35").Value) 将返回一个数字,您可以将其与类似创建的另一个数字进行比较。因此下面的代码。

    Private Sub TestFunction()
    
        MsgBox "Date difference is " & ogv("C35") & " days."
    End Sub
    
    Function ogv(CellAddress As String) As Integer
    
        With ThisWorkbook.ActiveSheet.Range(CellAddress)
            ogv = Abs(Int(CDate(.Value)) - Int(CDate(.Offset(-1).Value)))
        End With
    End Function
    

    使用 Sub 来测试调用函数。在您的 VBA 项目中使用 sub 中的代码。

    【讨论】:

      【解决方案3】:

      您可以使用DateDiff 函数。

      DateDiff(间隔, date1, date2)

      • interval :字符串表达式,即用于计算 date1 之间差异的时间间隔date2
      • date1date2:您要在计算中使用的两个日期。

      interval 参数具有以下设置:

      Setting  Description
      -------  -----------
       yyyy    Year
       q       Quarter
       m       Month
       y       Day of year
       d       Day
       w       Weekday
       ww      Week
       h       Hour
       n       Minute
       s       Second
      

      完整文档 here.

      【讨论】:

      • 哎呀,我错过了那部分,哈哈。我不妨留下这个答案以供参考,只是不要接受它。 :-)