Преобразование десятичного числа в минуты и секунды с использованием VBA
У меня есть время, представленное десятичным числом, которое мне нужно преобразовать в минуты и секунды в Excel, используя VBA.
Пример: число перед десятичной точкой дает минуты в виде 0,197683577 (0 минут), а число, умноженное на 60, дает секунд = 0,197683577*60 = 11,86101462 (12 секунд) = 0:12
Я знаю, что мог бы сделать это, скопировав и вставив в текстовый формат и разделив число слева и справа с помощью текста на столбцы десятичной точки, а затем добавив между ними ":", но должен быть способ вычислить это.
2 ответа
Функция VBA не работает для меня, но я нашел обходной путь в Excel:
=TRUNC(W11/60)&":"&IF(ROUND(((W11/60-TRUNC(W11/60))*60),0)=0,"00",ROUND(((W11/60-TRUNC(W11/60))*60),0))`
куда W11
время в виде десятичного числа, как 900.3201306
, Результат в минутах 15:00
По сути, вы берете усеченные десятичные минуты минус десятичные минуты + секунды, чтобы дать вам только секунды. Тогда вы берете decimal seconds * 60
чтобы дать тебе seconds+milliseconds
, Округлите это, чтобы дать вам секунды. Если секунды равны 0, напишите "00", чтобы получить правильный формат. Затем добавьте усеченные минуты плюс секунды.
Эта формула, кажется, работает.
Public Function FromDecimalTime(ByVal t As Double) As Date
FromDecimalTime = TimeSerial(0, Fix(t), (t - Fix(t)) * 60)
End Function
То же самое с формулой:
=TIME(0,TRUNC(A1),(A1-TRUNC(A1))*60)
Ну, не то же самое на самом деле. TimeSerial
округляет количество секунд согласно правилам округления (11.86
-> 12
), а также TIME
будет усекать (11.86
-> 11
). Но вы можете применить функцию округления к последнему аргументу.