Версия функции Excel:
В соответствии с запросом в комментариях, вот версия с функцией Excel:
КРУГЛЫЙ ДО СЛЕДУЮЩЕЙ 15-минутной границы:
= ВРЕМЯ (ЧАС (А1), 15 * ПОТОЛОК (МИНУТНЫЙ (А1) / 15,1), 0)
- N.B. заменить А1 на (t2-t1) согласно исходному вопросу
КРУГЛЫЙ К БЛИЖАЙШЕЙ 15-минутной границе:
= ВРЕМЯ (ЧАС (А1), 15 * ROUND (МИНУТНЫЙ (А1) / 15,0), 0)
Между прочим: следует избегать преобразования в строку для манипулирования датами как по соображениям производительности, так и, возможно, также по гео-причинам. Возможно, ни одна из этих вещей не беспокоит вас.
Версия VBA
Вы можете сделать это с помощью функций div и mod. Не уверен, хотите ли вы это в макросах VBA или Excel, но вот подход. Не делайте из меня превосходство прямо сейчас, так что вот так ...
(делайте в vba, если вам нужно многократно использовать это)
преобразовать в дробь
d = пол (n / 0,25)
остаток = n мод 0,25
x = 0,25 * раунд (остаток / 0,25)
ответ = (д * 0,25) + х
это должно быть близко.
... только что подумал о связи «Excel» с десятичной функцией (что это было снова). Это может быть лучший путь.
закодировано в vba ... только базовое тестирование:
Public Function f(n As Double) As Double
Dim d As Double, r As Double, x As Double
d = Int(n / 0.25)
r = n - (d * 0.25) ' strange... couldn't use mod function with decimal?
x = 0.25 * Round(r / 0.25)
f = (d * 0.25) + x
End Function
ИСПОЛЬЗОВАНИЕ:
(в клетке)
= F (с9-D9) * +1051 *