Для этого решения потребуется создать UDF (пользовательскую функцию) в VBA.
По сути, вы будете циклически искать все подходящие даты в вашем столбце. На все совпадающие даты вы будете изменять переменные minDt
и maxDt
по мере необходимости, если новое время будет меньше или больше того, что вы сохранили в данный момент.
Это, вероятно, не лучшее решение, поскольку создание UDF, содержащего цикл, будет своего рода узким местом, но это то, что я могу придумать в данный момент.
Option Explicit
Function getTimeDiff(col As String, inputDt As Date)
Dim colRng As Range, compDt As Date
Set colRng = Columns(col)
compDt = Int(inputDt) '<-- Converts date/time to date only
Dim cel As Range, maxDt As Date, minDt As Date, tmpDt As Date
maxDt = inputDt
minDt = inputDt
For Each cel In colRng.Cells
If cel = "" Then Exit For
tmpDt = CDate(cel)
If Int(tmpDt) = compDt Then
If tmpDt > maxDt Then
maxDt = tmpDt
ElseIf tmpDt < minDt Then
minDt = tmpDt
End If
End If
Next cel
getTimeDiff = Format(maxDt - minDt, "h:mm")
End Function
Читайте здесь о создании UDF
Если вы знакомы с UDF, вы можете пропустить этот раздел
- Нажмите Alt + F11 , чтобы открыть VBA.
- В VBE нажмите Вставить > Модуль
- Вставьте приведенный выше код в модуль
- Сохранить как Macro-Enabled Workbook
После того, как вы сохранили UDF, теперь вы можете использовать вновь созданную формулу.
Похоже, что ваши даты указаны в столбце C. Таким образом, если ваша первая дата была в C2
, ваша формула для D2
была бы:
=getTimeDiff("C", C2)
