Версия функции Excel:
Согласно запросу в комментариях, здесь версия только для функции excel:
ОКРУГЛЕНИЕ ДО СЛЕДУЮЩИХ 15 МИНУТ:
=ВРЕМЯ(ЧАС(A1),15*ПОТОЛОК(МИНУТЫ(A1)/15,1),0)
- Н.Б. замените A1 на (t2-t1) в соответствии с исходным вопросом
ОКРУГЛЕНИЕ ДО БЛИЖАЙШЕЙ 15-МИНУТНОЙ ГРАНИЦЫ:
=ВРЕМЯ(ЧАС(A1),15*ОКРУГЛ(МИНУТЫ(A1)/15,0),0)
Кстати: следует избегать преобразования в строку для манипулирования датами как по причинам производительности, так и, возможно, также по гео-причинам. Возможно, ни одна из этих вещей не беспокоит вас.
Версия VBA
вы можете сделать это с помощью функций div и mod. Не уверен, хотите ли вы это в макросах vba или excel, но вот подход. Передо мной сейчас нет Excel, так что вот...
(сделайте в vba, если вам нужно много раз использовать это)
преобразовать в дробь
д = пол (n / 0,25)
остаток=n по модулю 0,25
х=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(c9-d9)
person
sgtz
schedule
31.05.2011