Рассчитать разницу во времени в часах между двумя датами и временем

#excel #vba

#excel #vba

Вопрос:

Я создал макрос, который добавляет новый столбец с именем «Время отклика». Я хочу рассчитать разницу во времени между значениями в двух столбцах.

Я дал простую формулу:
D2 (имя столбца) — C2 (имя столбца) = общее время в формате ЧЧ: ММ

Когда дата совпадает, т.е. Временные рамки в пределах 24 часов, вывод макроса корректен.

Тем не менее, я хочу, чтобы макрос находил разницу в датах и вычислял общее количество часов во вновь добавленном столбце «Время отклика».

Например,
столбец C (ММ / ДД / ГГГГ чч: мм) 02.09.2020 23:00
Столбец D (ММ / ДД / ГГГГ чч: мм) 03.09.2020 22:00
Вывод во вновь добавленном столбце с именем (время отклика) должен составлять 25:00 часов, так как разница составляет 1 день 1 час, так что итого25 часов.

Неправильный вывод экрана Excel
Неверный вывод в столбце с именем Время отклика

В выделенной области столбцы C и D имеют две разные даты, где интервал времени превышает 24 часа, а вывод в столбце F неверен.

Мне нужна формула в coding, которая сравнивает дату и время этих двух столбцов и дает общее количество часов в формате HH: MM.
В выделенной выше области общее количество часов должно показывать приблизительно 162 часа.

 Sub response6()

    'Find and Substract (_recvd - _actual)
    
    'Full In Gate at Ocean Terminal (CY or Port)_actual
    'Full In Gate at Ocean Terminal (CY or Port)_recvd
    
    Dim lastR As Long, cl As Range, col1 As Long
    
    With ActiveWorkbook.Worksheets("Main")
        For Each cl In .Range("1:1")
            If cl.Value = "Full In Gate at Ocean Terminal (CY or Port)_recvd" Then
                cl.Offset(0, 1).EntireColumn.Insert shift:=xlRight
                cl.Offset(0, 1) = "Response Time"
                cl.Copy
                cl.Offset(0, 1).PasteSpecial Paste:=xlPasteFormats
                Application.CutCopyMode = False
                Exit For ' exit the loop after finding the column
            End If
        Next cl
                 
        With ActiveWorkbook.Worksheets("Main")
        col1 = .Cells.Find(What:="Full In Gate at Ocean Terminal (CY or Port)_actual", _
          After:=.Range("A1"), LookIn:=xlValues, _
          lookat:=xlWhole, searchorder:=xlByRows, searchdirection:=xlNext, _
          MatchCase:=False, SearchFormat:=False).Column
                            
        If col1 = 0 Then MsgBox "The column header could not be found...": Exit Sub
    
            lastR = .Cells(Rows.Count, cl.Column).End(xlUp).Row 'last row
            'put formula (at once):
            .Range(cl.Offset(1, 1), .Cells(lastR, cl.Offset(1, 1).Column)).Formula = _
              "=" amp; cl.Offset(1, 0).Address(0, 0) amp; .Cells(2, col1).Address(0, 0) amp; "/" amp; "60"
               
            Dim d1 As DateTime = "2/13/2018 1:50:00 PM"
            Dim d2 As DateTime = "2/20/2018 1:50:00 PM"
               
            cl.Offset(, 1).EntireColumn.NumberFormat = "hh:mm"
          
        End With
             
    End With
End Sub
 

Ответ №1:

введите описание изображения здесь

  • Формула в столбце D: =C:C-B:B
  • Формат чисел в столбце D: [h]:mm

Это все, что вам нужно.

Комментарии:

1. Это иллюстрирует принцип «Будь проще, глупо» 🙂

Ответ №2:

Чтобы получить общее количество часов между двумя датами, просто вычтите и примените правильный формат:

 Sub INeedADate()
    [c1] = [b1] - [a1]
    Range("C1").NumberFormat = "[hh]:mm"
End Sub
 

введите описание изображения здесь

Ответ №3:

Самый простой способ получить часы — это сделать :

День (столбец D — столбец C) * 24 часа (столбец D — столбец C)

для минут: минута (столбец D — столбец C)