Вложенный Для, Делай пока, Делай пока, цикл If-else - PullRequest
0 голосов
/ 27 апреля 2020

Моя цель - найти продолжительность работы во времени. Сохраните окончательное время CLOCKIN в переменной START (разные метки времени принадлежат CLOCKIN). Перозон ушел на обед (CLOCKOUT) и вернулся (CLOCKIN), запишите разницу времени обеда в переменную LUNCH. Наконец, человек покинул офис на день, запишите окончательное время CLOCKOUT в переменной EXIT (так как разные отметки времени относятся к CLOCKOUT). В конце код должен дать мне продолжительность работы в офисе LUNCH-START = FINAL1 и EXIT-LUNCH = FINAL2, answer = FINAL1 + FINAL2 в часах.

Я хочу повторить вышеупомянутое упражнение для разных дат.

Описание данных: у меня есть таблица из 6 столбцов (дата, время, имя, doorName, EntryType). В столбце EntryType у меня есть критерии CLOCKIN и CLOCKOUT. CLOCKIN означает, что человек вошел в дверь офиса. Как видно из таблицы данных, значение данных «CLOCKIN» несколько раз означает, что отдельная карта с размахом у разных дверей. Когда он проводит свою карточку через каждую дверь, генерируется временная метка, которая отображается в столбце «время». Например, водитель, Крейг сильно ударил карточку в дверь 1 в 4:47:29 утра. Он ударил карточку через дверь 2 в 4:50:09 и, наконец, сильно ударил карточку через дверь 3 в 4:50:28. Наконец он в офисе. Теперь он ЗАКРЫВАЕТСЯ в 11:43:10 утра, что означает, что он ушел из офиса на обед. Он вернулся в офис в 11:55:47. В конце дня он навсегда покинул офис, проводя сквозь двери в 3:00:35 и 3:02:58.

Я хочу подсчитать, сколько часов водитель, Крейг был в офисе , Просто он пришел в офис в 4:47:29, ушел на обед на 15 минут (с 11:43:10 до 11:55:47). Наконец он покинул свой пост в 3:02:58. Поэтому он был в офисе около 10 часов. Как мне найти его с помощью VBA?

Я написал код VBA и мне удалось вытащить время отдельно, но я не смог вычислить наш следующий шаг вычисления окончательного времени.

Sub Macro1()
Dim x As Integer
Dim lrow As Long
lrow = Cells(Rows.Count, "A").End(xlUp).Row
x = 1
    With Range("F:F")
        For x = 1 To lrow
            If Range("F" & x) = "INBOUND" Then
                Range("F" & x).Select
                Range("h" & x).Value = CDate(Range("b" & x))
                ElseIf Range("F" & x) = "OUTBOUND" Then
                Range("F" & x).Select
                Range("I" & x).Value = CDate(Range("b" & x))
            End If
            Next

    End With
End Sub

Sub workduration()
    'need to subtract first entry time from last entry time until it is punched out i.e unitl row where exit time shown
    'check until exit column in blank
    Dim a As Integer
    a = 1
        For a = 1 To 8
        If IsEmpty(Range("i" & a)) = True Then

            Cells(a, 10).Value = "=MOD(cells(a+1,8).value - cells((a,8).value ,1)*24"

        End If
        Next


End Sub

изображение показывает таблица данных

enter image description here

Я написал другой код VBA, но он также не работал. Это как следует

Sub times()
Dim x, m As Integer 'shows column # containing desired word
Dim y, n As Integer 'shows row# containing desired word
Dim var, var1, var2 As Variant
Dim lrow As Integer
lrow = Cells(Rows.Count, 1).End(xlUp).Row
Dim i As Integer
For Each Cells In Range("F:F")
       Set rfind = .Find(what:="INBOUND", Lookat:=xlPart, MatchCase:=False)
         If Not rfind Is Nothing Then
            'MsgBox rfind.Column
            'MsgBox rfind.Row
            x = rfind.Row
            y = rfind.Column
        Cells(x, y).Select
        ActiveCell.Offset(0, -3).Select
          var1 = (ActiveCell.Value)
          var3 = CDate(var1)
        Selection.Font.Color = vbRed

        End If
       Set cfind = .Find(what:="OUTBOUND", Lookat:=xlPart, MatchCase:=False)
       If Not cfind Is Nothing Then
            'MsgBox cfind.Column
            'MsgBox cfind.Row
            n = cfind.Column
            m = cfind.Row
        Cells(m, n).Select
        Selection.Offset(0, -3).Select
        var2 = ActiveCell.Value
        var4 = CDate(var2)
        Selection.Font.Color = vbGreen
        End If
        Range("H2").Formula = "=CDate(var4) - CDate(var3)"
        answer = DateDiff("h", var3, var4)
        'Range("H2").Formula = "=mod(var4-var2,1)*24"
    End With
      Range("h" & i).Value = answer
Next i
        'Range("J1").Formula = "=sum(range("h1":"H100"))"

End Sub
...