Umrechnung Minuten/Sekunden in Zeitangabe

By , 24. Mai 2012

Konvertierungsfunktionen wie Minuten oder Sekunden in Zeitangabe zu konvertieren. sollte an und für sich kein Problem sein. Wenn die Rechenarithmetik von Access uns keinen Strich durch die Rechnung machen würde. Angenommen man hat 400 Minuten und teilt diese durch 60 und weisst das Ergebnis einer Long-Variablen zu, um die Stunden zu erhalten: 400/60 = 6.66666667. Dieses einem Long-Wert zugeordnet ergibt aber 7!
Ein Trick ist die Teilung mit einem Backslash, also 400\60. Diese Division gibt immer die Zahl vor dem Komma zurück, Nachkommastellen werden einfach abgeschnitten.

Fangen wir mal mit den Funktionen an. Diese am besten in einem Modul plazieren:

Public Function ConvertMintoTime(varM As Long)
    Dim hours As Long
    Dim minutes As Long

    hours = varM \ 60
    minutes = varM - hours * 60
    
    ConvertMintoTime = Format(hours, "00") & Format(minutes, "\:00") & ":00"
End Function

Public Function ConvertSectoTime(varS As Long)
    Dim hours As Long
    Dim minutes As Long
    Dim seconds As Long

    hours = varS \ 3600
    minutes = (varS - hours * 3600) \ 60
    seconds = varS - hours * 3600 - minutes * 60
    
    ConvertSectoTime = Format(hours, "00") & Format(minutes, "\:00") & Format(seconds, "\:00")
End Function

In der ersten Funktion werden die Minuten durch 60 geteilt um die Stunden zu erhalten. Im zweiten Schritt wird die Differenz zwischen den Minuten und den Stunden x 60 ermittelt, um die Minuten zuerhalten, was letztendlich nichts anderes als der Rest der ersten Division ist.

In der zweiten Funktion haben wir Sekunden, daher teilen wir durch 3600 für die Stunden. der Rest dieser Division wird dann durch 60 geteilt für die Minuten, und der letzte Rest bildet dann die Sekunden ab.
Per Format() Funktion wird die Ausgabe der Funktion aufbereitet.

Der Aufruf kann z.B. aus einem Formular oder anderen Modul erfolgen, da die Funktionen den Gültigkeitsbereich Public besitzen. Dieser könnte z.B. so aussehen:

Sub test()
    Dim t As Long
    t = 4000

    MsgBox t & " Sekunden sind Umgerechnet: " & ConvertSectoTime(t)
    MsgBox t & " Minuten sind Umgerechnet: " & ConvertMintoTime(t)
End Sub

Das wars schon, also eigentlich bis auf den Fallstrick mit dem Teil-Strich nichts besonderes.

Bis dahin
Andreas Vogt © 2012

OfficeFolders theme by Themocracy