Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:提取两列之间的分钟和小时数_Excel_Vba - Fatal编程技术网

Excel VBA:提取两列之间的分钟和小时数

Excel VBA:提取两列之间的分钟和小时数,excel,vba,Excel,Vba,我有以下清单: ID In Out A 23.03.2018 08:16:14 23.03.2018 13:56:03 B 23.03.2018 11:16:14 23.03.2018 13:56:03 我必须创造这样的东西: ID In A 23.03.2018 08:17:00 A 23.03.2018 08:18:00 ...

我有以下清单:

ID  In                        Out 
A   23.03.2018  08:16:14      23.03.2018  13:56:03
B   23.03.2018  11:16:14      23.03.2018  13:56:03
我必须创造这样的东西:

ID  In                         
A   23.03.2018  08:17:00      
A   23.03.2018  08:18:00
...
A   23.03.2018  13:55:00      
B   23.03.2018  11:17:00
B   23.03.2018  11:18:00
...
B   23.03.2018  13:55:00      
为此,我尝试使用此代码

Sub TimeSheet()
Dim timeEntries As Range, entry As Range, startTime As Integer, endTime As Integer, hr As Integer, lastRow As Integer

Set timeEntries = Worksheets("Input").Range("A2:A3")

For Each entry In timeEntries
    startTime = GetHour(entry.Offset(0, 1), "IN")
    endTime = GetHour(entry.Offset(0, 2), "OUT")

    For hr = startTime To endTime

        With Worksheets("Output")
            lastRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1
            .Range("A" & lastRow) = entry
            .Range("B" & lastRow) = DateValue(entry.Offset(0, 1)) & " " & TimeSerial(hr, 0, 0)
        End With

    Next hr
Next entry

End Sub

Function GetHour(t As Date, stamp As String) As Date
Dim result As Date

If stamp = "IN" Then
    If Minute(t) = 0 Then
        result = Hour(t)
    Else
        result = Hour(DateAdd("h", 1, t))
    End If
Else
    If Minute(t) = 0 Then
        result = Hour(t)
    Else
        result = Hour(DateAdd("h", -1, t))
    End If

End If

GetHour = result
End Function
“输入”和“输出”列分别包含日期和小时。我需要做的是从进进出出看小时和分钟,并计算它们之间的小时和分钟。必须将计算的每小时和每分钟保存在一行中,如第二个表中所示。
使用上面的代码,我只能提取小时数,例如2018年3月23日09:00:00、10:00:00、11:00:00等。知道如何更改函数GetHour来保存分钟数吗?谢谢

您可以完全取消函数调用,只需使用DateDiff计算每个条目之间的分钟数,使用For Next循环将迭代中的分钟数迭代添加到startTime

这产生了以下结果:

A   23.03.2018 08:17:00
A   23.03.2018 08:18:00
A   23.03.2018 08:19:00
A   23.03.2018 08:20:00
....
A   23.03.2018 13:55:00
B   23.03.2018 11:17:00
B   23.03.2018 11:18:00
B   23.03.2018 11:19:00
B   23.03.2018 11:20:00
....
B   23.03.2018 13:55:00

为什么不接受差异?@Urderboy我不能-例如,2018年3月23日08:16:14和2018年3月23日13:56:03将返回09:00、10:00等。但是,我需要从08:17开始:00@urdearboy实际上,函数按小时取整,但我不需要更多的取整,只需要提取值
A   23.03.2018 08:17:00
A   23.03.2018 08:18:00
A   23.03.2018 08:19:00
A   23.03.2018 08:20:00
....
A   23.03.2018 13:55:00
B   23.03.2018 11:17:00
B   23.03.2018 11:18:00
B   23.03.2018 11:19:00
B   23.03.2018 11:20:00
....
B   23.03.2018 13:55:00