所以我试图在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!
答案 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行开始。