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
我无法在几分钟内获取两个日期之间的详细或具体差异。比方说:
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