VBA获得小时数的具体差异

时间:2015-10-19 08:01:58

标签: vba date difference hour

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

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天,

     

72小时(3小时24小时),

     1440分钟(24小时60分钟)。

3 个答案:

答案 0 :(得分:1)

原因是您使用的函数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)

答案 1 :(得分:0)

在内部,日期存储为自1月1日至1900年(或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备注。

答案 2 :(得分:-1)

实际上,它很简单!我从没想过这样可以像我想的那样产生答案! :)

Dim FROW As Long     Dim lrow As Long     Dim PRow As Long

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