VBA 获取小时数的具体差异

VBA Get specific differences in hours

我无法在几分钟内获取两个日期之间的详细或具体差异。比方说:

Date Start : 24/7/2015  12:38:00 PM
Date End   : 27/7/2015  12:12:00 PM

我的代码确实给出了两个日期之间的差异,但实际上并没有具体说明,这意味着它给出了两个日期之间 3 天的差异,但不仅仅是我想要的(假设它们的差异是 68 小时 30 分 56 秒)。那么,我该怎么做呢?

这是我的代码:

Date1 = DateValue(CurrentSheet.Cells(PRow, "U").Value)
Date2 = DateValue(CurrentSheet.Cells(PRow, "S").Value)

FRow = CurrentSheet.UsedRange.Cells(1).Row
lrow = CurrentSheet.UsedRange.Rows(CurrentSheet.UsedRange.Rows.count).Row

For PRow = lrow To 2 Step -1
    CurrentSheet.Cells(PRow, "AD").Value = DateDiff("d", Date2, Date1) 'produce days
    CurrentSheet.Cells(PRow, "AE").Value = DateDiff("h", Date2, Date1) 'produce hours
    CurrentSheet.Cells(PRow, "AF").Value = DateDiff("n", Date2, Date1) 'produce minutes
Next PRow

目前我得到的答案:

3 days,

72hours (3 times 24hours),

1440minutes (24hours times 60minutes).

原因是您使用了函数 DateValue 仅将值转换为日期(删除了时间部分)。

那么,那些日期:

Date Start : 24/7/2015  12:38:00 PM
Date End   : 27/7/2015  12:12:00 PM

DateValue 函数处理后变成:

Date Start : 24/7/2015  00:00:00
Date End   : 27/7/2015  00:00:00

[编辑]

您需要将它们转换为 Date 类型。

您可以使用 VBA 内置函数 CDate 来做到这一点:

Date1 = CDate(CurrentSheet.Cells(PRow, "U").Value)
Date2 = CDate(CurrentSheet.Cells(PRow, "S").Value)

在内部,日期存储为自 1900 年 1 月 1 日(或 1902 年,这并不重要)以来的天数。这意味着 1 day = 1,也意味着 1 hour = 1/24
因此,如果我正确理解你的问题,要获得 date2 和 date1 之间的天数、小时数、分钟数的差异,你可以使用

daysdiff = DateDiff("d", Date2, Date1)
hoursdiff = INT((Date2-date1-Daysdiff)/24)
'or
hoursdiff = DateDiff("h", Date2-daysdiff, Date1)
minutesdiff = Datediff("n", Date2-daysdiff-hoursdiff/24, Date1)

抱歉,没有测试,但你明白了。


编辑:您还应该在更改中包含@mielk 的评论。

其实很简单!没想到这种方式可以出我想要的答案! :)

变暗 FRow 一样长 昏暗的行一样长 昏暗的 PRow 一样长

Range("AD1").Value = "Hours Differences"

Dim CurrentSheet As Worksheet
Set CurrentSheet = Excel.ActiveSheet

FRow = CurrentSheet.UsedRange.Cells(1).Row
lrow = CurrentSheet.UsedRange.Rows(CurrentSheet.UsedRange.Rows.count).Row

For PRow = lrow To 2 Step -1
CurrentSheet.Cells(PRow, "AD").Value = (CurrentSheet.Cells(PRow, "U").Value - CurrentSheet.Cells(PRow, "S").Value) * 24
Next PRow

它将产生 71.5666666666511。 DATE 格式让我分心。感谢所有这些帮助! :D