2012-05-02 36 views
3

J'ai le temps représenté par un nombre décimal que j'ai besoin de convertir en minutes et secondes dans Excel en utilisant VBA.Convertir nombre décimal en minutes et secondes en utilisant VBA

Exemple: Le nombre avant la virgule donne les minutes comme 0,197683577 (0 minutes) et le nombre multiplié par 60 donne les secondes = 0.197683577 * 60 = 11,86101462 (12 secondes) = 0:12

Je sais que je pourrais le faire en copiant et collant au format texte et en séparant le nombre à gauche et à droite en utilisant le texte aux colonnes de la virgule décimale, puis ajouter ":" entre mais il doit y avoir un moyen de calculer cela.

Répondre

1

La fonction VBA ne fonctionne pas pour moi, mais je l'ai trouvé une solution d'Excel:

=TRUNC(W11/60)&":"&IF(ROUND(((W11/60-TRUNC(W11/60))*60),0)=0,"00",ROUND(((W11/60-TRUNC(W11/60))*60),0))` 

W11 est le temps sous la forme d'un nombre décimal comme 900.3201306. Le résultat est en minutes 15:00

Fondamentalement, vous prenez les minutes décimales tronquées moins les minutes décimales + secondes pour vous donner seulement des secondes. Ensuite, vous prenez le decimal seconds * 60 pour vous donner seconds+milliseconds. Arrondis cela pour te donner des secondes. Si les secondes sont 0 alors écrivez "00" pour obtenir le format correct. Ajoutez ensuite les minutes tronquées plus les secondes.

Cette formule semble fonctionner.

4
Public Function FromDecimalTime(ByVal t As Double) As Date 
    FromDecimalTime = TimeSerial(0, Fix(t), (t - Fix(t)) * 60) 
End Function 

Même avec une formule:

=TIME(0,TRUNC(A1),(A1-TRUNC(A1))*60) 

Eh bien, pas la même réalité. TimeSerial arrondira le nombre de secondes selon les règles d'arrondi (11.86 ->12) et TIME tronquera (11.86 ->11). Mais vous pouvez appliquer une fonction d'arrondi à son dernier argument.

+1

Merci beaucoup! Comme je voulais un entier pour les minutes, j'ai utilisé Fix (decim) et Format (val, ": ss") pour obtenir le format correct. Je ne suis pas sûr s'il y a un code de format d'heure pour générer ceci mais cela semble fonctionner. « Sub aaaaaaaMacro1() Dim decim As Double decim = Range ("AB11") Valeur Dim val As Date val = TimeSerial (0, Fix (decim), (decim -. Fix (decim)) * 60) MsgBox Fix (décim) et Format (val, ": ss") End Sub ' – user1371038

Questions connexes