Подсчет часов между двумя столбцами - PullRequest
0 голосов
/ 25 февраля 2019

У меня есть следующий список:

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  09:00:00      
A   23.03.2018  10:00:00
A   23.03.2018  11:00:00      
A   23.03.2018  12:00:00   
B   23.03.2018  12:00:00      

Столбцы «В» и «Вне» содержат каждый дату ичас.Что мне нужно сделать, так это посмотреть на часы с «In» и «Out» и посчитать часы между ними.Каждый отсчитанный час должен быть сохранен в строке, как во второй таблице.Это может быть другой результат таблицы, например.Например, если In начинается в 10:01:00, я начну считать с 11. Есть идеи, как мне это сделать?Я пытался с помощью сводной таблицы, но я не думаю, что можно рассчитывать таким образом.Спасибо!

1 Ответ

0 голосов
/ 25 февраля 2019

Попробуйте:

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

Примечания

  1. Рабочий лист Input содержит данные In и Out, начиная с A2 (первая строка в качестве заголовка)
  2. Рабочий лист Output содержит сводную таблицу, начинающуюся с A2 (первая строка в качестве заголовка)
  3. Функция GetHour() получает начальный и конечный часы на основе вашегологика
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...