使用VBA中的DateDiff函数获取两个日期之间的天数

时间:2015-04-09 20:38:35

标签: datediff

所以我试图在Excel工作表中获取2个日期,并使用DateDiff函数获取2个日期之间的天数。我基本上将天数加在一起除以得到的行数和平均天数。到目前为止,我已将它放到每一行的总天数加在一起的位置,并显示在#34; E"并且行数放在列#34; F"。我知道我很接近,因为有一点它起作用,但我愚蠢而改变了一些东西,现在我没有。这是我的代码和excel表。

 Sub GetDays()

    Range("C1").Select

    Do Until ActiveCell.Value = ""

        date1 = DateValue(ActiveCell.Offset(1, 0).Value)
        date2 = DateValue(ActiveCell.Offset(1, 0).EntireRow.Cells(1, "D").Value)

        DayCount = DateDiff("d", date1, date2) + DayCount
        ActiveCell.Offset(1, 0).EntireRow.Cells(1, "E").Value = DayCount

        StudentCount = StudentCount + 1
        ActiveCell.Offset(1, 0).EntireRow.Cells(1, "F").Value = StudentCount

        ActiveCell.Offset(1, 0).Select
    Loop

 End Sub!

Here is a snippet of the sheet

1 个答案:

答案 0 :(得分:1)

我在测试代码时发现的问题是你的循环与ActiveCell值进行比较以确定何时退出,但是由于偏移量(1,0),你的代码在ActiveCell下面的单元格上运行呼叫。所以当你的循环在最后一行数据上时,ActiveCell.Value =“3/25/2015 10:52”,但是你的下一行代码试图用null的DateValue填充date1,因为它是向下偏移的一行行。这会引发类型不匹配错误。

我已经调整了下面的代码,这对我有用:

Sub GetDays()

  Range("C1").Select

  Do Until ActiveCell.Value = ""

    date1 = DateValue(ActiveCell.Value)
    date2 = DateValue(ActiveCell.Offset(0, 1).Value)

    DayCount = DateDiff("d", date1, date2) + DayCount
    ActiveCell.Offset(0, 2).Value = DayCount

    StudentCount = StudentCount + 1
    ActiveCell.Offset(0, 3).Value = StudentCount

    ActiveCell.Offset(1, 0).Select
  Loop

End Sub

我调整了偏移命令,以便我们在每个循环中始终查看同一行。我只是使用Offset()中的列整数替换了“EntireRow.Cells(1,”D“)”部分。

您可能需要将第二行更改为:范围(“C2”)。选择我的代码是否有效,具体取决于您的数据是从第1行还是第2行开始。