Преобразование десятичного числа в минуты и секунды с использованием 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). Но вы можете применить функцию округления к последнему аргументу.

Другие вопросы по тегам