使用 VBA 中的 DateDiff 函数获取两个日期之间的天数
Using the DateDiff function in VBA to get number of days between 2 dates
所以我试图在 excel sheet 中获取 2 个日期,并使用 DateDiff 函数获取这 2 个日期之间的天数。我实质上是将天数相加,然后除以要获取的行数和平均天数。到目前为止,我已经将每一行的总天数加在一起并显示在列 "E" 上,行数显示在列 "F" 上。我知道我很接近,因为在某一时刻它起作用了,但我很笨,改变了一些东西,但现在我没有。这是我的代码和 excel sheet.
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!
我在测试您的代码时发现的问题是您的循环正在与 ActiveCell 值进行比较以确定何时退出,但是由于 Offset(1, 0) 调用。因此,当您的循环位于最后一行数据时,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").Select 以使我的代码正常工作,具体取决于您的数据是从第 1 行还是第 2 行开始。
所以我试图在 excel sheet 中获取 2 个日期,并使用 DateDiff 函数获取这 2 个日期之间的天数。我实质上是将天数相加,然后除以要获取的行数和平均天数。到目前为止,我已经将每一行的总天数加在一起并显示在列 "E" 上,行数显示在列 "F" 上。我知道我很接近,因为在某一时刻它起作用了,但我很笨,改变了一些东西,但现在我没有。这是我的代码和 excel sheet.
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!
我在测试您的代码时发现的问题是您的循环正在与 ActiveCell 值进行比较以确定何时退出,但是由于 Offset(1, 0) 调用。因此,当您的循环位于最后一行数据时,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").Select 以使我的代码正常工作,具体取决于您的数据是从第 1 行还是第 2 行开始。