For i = 3 To lastRow endTime = CDate(ws.Range("F" & i).Value) startTime = CDate(ws.Range("E" & i).Value) hoursDiff = DateDiff("h", startTime, endTime) minutesDiff = DateDiff("n", startTime, endTime) Mod 60 totalHours = hoursDiff + minutesDiff / 60 ' 将小时和分钟差异写入G列(格式为小数) ws.Range("G" & i).Value = totalHours Next i修改這個代碼中日期有跨天,需要注意
时间: 2024-04-15 18:29:26 浏览: 108
Middleware-Middleware.zip
如果在计算时间差异时存在跨天的情况,您需要考虑日期的影响。在计算小时差异和分钟差异之前,您可以先将日期部分从起始时间和结束时间中分离出来,然后将其转换为纯时间。以下是修改后的代码:
```vba
For i = 3 To lastRow
endTime = CDate(ws.Range("F" & i).Value)
startTime = CDate(ws.Range("E" & i).Value)
' 提取日期和时间部分
startDate = DateValue(startTime)
startTime = TimeValue(startTime)
endDate = DateValue(endTime)
endTime = TimeValue(endTime)
' 处理日期跨天的情况
If endDate > startDate Then
hoursDiff = 24 ' 计为24小时
Else
hoursDiff = DateDiff("h", startTime, endTime)
End If
minutesDiff = DateDiff("n", startTime, endTime) Mod 60
totalHours = hoursDiff + minutesDiff / 60
' 将小时和分钟差异写入G列(格式为小数)
ws.Range("G" & i).Value = totalHours
Next i
```
将上述代码复制并替换原始代码中的循环部分,然后运行修改后的代码。它将处理日期跨天的情况,并根据需要将其计算为24小时或计算实际的小时差异。
希望对您有所帮助!如果您有任何其他问题,请随时提问。
阅读全文