#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:
Комментарии:
1. Это иллюстрирует принцип «Будь проще, глупо» 🙂
Ответ №2:
Чтобы получить общее количество часов между двумя датами, просто вычтите и примените правильный формат:
Sub INeedADate()
[c1] = [b1] - [a1]
Range("C1").NumberFormat = "[hh]:mm"
End Sub
Ответ №3:
Самый простой способ получить часы — это сделать :
День (столбец D — столбец C) * 24 часа (столбец D — столбец C)
для минут: минута (столбец D — столбец C)