【问题标题】:Using the DateDiff function in VBA to get number of days between 2 dates在 VBA 中使用 DateDiff 函数获取两个日期之间的天数
【发布时间】:2015-04-09 20:38:35
【问题描述】:

所以我试图在 Excel 工作表中获取 2 个日期并使用 DateDiff 函数来获取 2 个日期之间的天数。我本质上是将天数相加并除以要获取的行数和平均天数。到目前为止,我已经将每行的总天数加在一起并显示在“E”列上,而行数放在“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

【问题讨论】:

    标签: datediff


    【解决方案1】:

    我在测试您的代码时发现的问题是您的循环正在与 ActiveCell 值进行比较以确定何时退出,但是由于 Offset(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")”部分。

    您可能需要将第二行更改为:Range ("C2")。选择我的代码才能工作,具体取决于您的数据是从第 1 行还是第 2 行开始。

    【讨论】:

    • 非常感谢,现在可以使用了。我明白我做错了什么。我对这种语言还是有点陌生​​。
    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-22
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多