2012-05-02 2 views
3

У меня есть время, представленное десятичным числом, которое мне нужно преобразовать в минуты и секунды в Excel с помощью VBA.Преобразование десятичных чисел в минуты и секунды с использованием VBA

Пример: Числа перед десятичной точкой дает минуты, как 0,197683577 (0 минут) и число, умноженное на 60 дают секунды = 0.197683577 * 60 = +11,86101462 (12 секунд) = 0:12

Я знаю, что могу это сделать, копируя и вставляя в текстовый формат и разделяя число влево и вправо, используя текст в столбцы десятичной точки, а затем добавляем «:» между ними, но должен быть способ расчета этого.

ответ

1

Функция 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», чтобы получить правильный формат. Затем добавьте усеченные минуты плюс секунды.

Эта формула работает.

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

+1

Большое спасибо! Поскольку я хотел целое число за минуты, я использовал Fix (decim) & Format (val, ": ss"), чтобы получить правильный формат. Я не уверен, есть ли код времени для создания этого, но он, похоже, работает. «Sub aaaaaaaMacro1() Dim DECIM As Double DECIM = Range ("AB11") Значение Dim вал As Date вал = TimeSerial (0, Fix (DECIM), (DECIM. - Fix (DECIM)) * 60) MsgBox Fix (decim) & Format (val, ": ss") End Sub ' – user1371038

Смежные вопросы