excel - время округления до 15 минут - PullRequest
4 голосов
/ 01 июня 2011

У меня есть формула, которая вычисляет разницу в несколько раз и умножает ее на 24, чтобы получить десятичное значение для суммы:

D10=(C9-D9)*24

Я бы хотел сделать специальное округление следующим образом:

если D9 is 1pm и C9 is 2:08 pm, я бы хотел, чтобы D10 был 1.25

другие слова

1:53 until 2:07 would be counted as 2
2:08 until 2:22 would be 2:15
2:23 through 2:37 would be 2:30
etc

Кто-нибудь знает, как сделать такое специальное округление?

как сказал Дуг:

i need the accrued time from 1 PM to 2:08 PM should round up to 1.25 hours whereas 1 PM to 2 PM would round down to 1 hour, in other words to the nearest quarter hour.

Ответы [ 4 ]

4 голосов
/ 22 июня 2011

Если вам нужна разница во времени в часах, но с округлением до ближайшего четверти часа, то, возможно, все, что вам нужно, это что-то вроде:

=MROUND((C9-D9)*24,0.25)
4 голосов
/ 01 июня 2011

Вот формула, которая разделит разницу, как вы хотели:

=(TRUNC((D9+VALUE("00:07"))*96)-TRUNC((C9+VALUE("00:07"))*96))*VALUE("00:15")*24
2 голосов
/ 01 июня 2011

Версия функции 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 *

1 голос
/ 01 июня 2011

Вот еще одна формальная опция

=(ROUND(+D9*96,0)-ROUND(+C9*96,0))/4

Конвертирует каждый раз сериал в 1/4 часа (* 96), округляет, добавляет результаты и масштабирует в часы (* 4)

...