- Startseite
- Neuigkeiten
- Über mich
- Referenzen
- Beispiele
- Artikel
- Vorträge
- Tools
- Access-Tipps
- %-Eingabe
- Bilder
- Datenblattreset
- Datumsformate
- DConcat
- Hilfe
- Import
- Testversion
- UTF-8-Dateien
- WerIstDrin
- Excel-Tipps
- Spielereien
- Kontakt
- Impressum
- Datenschutz
Meine Projekte:


Access-Datumsformat mit mehr als 24 Stunden
Von einem Kunden wurde ich gefragt, wie man die Formatierung von Zeiten mit mehr als 24 Stunden erreichen kann. In Excel geht das sehr einfach mit dem Format [h]:mm. In Access gibt dieses Format nicht, was mir aber nie aufgefallen war, weil bei meinen Anwendungen bisher immer Industrieminuten zum Einsatz kamen. Das war dann auch der Ansatz für die Lösung:
=Format(Fix(Summe([Arbeitszeit])*24);"#.##0") & Format(Summe([Arbeitszeit]);":nn")
Die Vorkomma(doppelpunkt)stellen in Industriestunden umrechnen (Zeit * 24) und die Zeitminuten mit einem Doppelpunkt zusammen anhängen.
Code
Und um nicht immer die komplizierte Formel eingeben zu müssen, habe ich – auf Basis einer alten Format-Funktion – eine neue erstellt:
Public Function fStundenMinuten(ByVal varZeit As Variant) As String ' ---------------------------------------------------------------- ' Zweck : Zeiten als Stunden (auch > 24) mit Minuten anzeigen, ' analog zum Format [h]:nn in Excel ' Eingabe : Eine Zeit / Datum oder eine Zahl, die als Zeitraum ' interpretiert werden können. ' Beispiele: ' fStundenMinuten("1.1.1900 23:59") > 71:59 ' fStundenMinuten(1.5) > 36:00 ' fStundenMinuten(Summe([Arbeitszeit]) > 99:99 ' fStundenMinuten(NULL) > 0:00 ' fStundenMinuten("Willi Wacker") > #Typ ' Ausgabe : Text im Format Stunden (Standardzahl) : Minuten ' Autor : Raphael Hein ' Datum : 11.09.2020 ' ---------------------------------------------------------------- ' nötigenfalls ein Datum in eine Zahl umwandeln If IsDate(varZeit) Then varZeit = CDbl(CDate(varZeit)) End If If IsNumeric(varZeit) Then ' Format aus der Zahl formatieren: ' Vorkommastellen (Tage) * 24 = Stunden fStundenMinuten = Format(Fix(varZeit * 24), "#,##0") _ & Format(varZeit, ":nn") Else If IsNull(varZeit) Then fStundenMinuten = "0:00" Else fStundenMinuten = "#Typ" End If End If End Function
Und der Vollständigkeit halber hier noch die alte Tage-Stunden-Funktion:
Public Function fTageStunden(ByVal varZeit As Variant, _ Optional booVoll As Boolean = True) As String ' ---------------------------------------------------------------- ' Zweck : Zeiten als Tage mit (vollen) Stunden ' Eingabe : Eine Zeit / Datum oder eine Zahl, die als Zeitraum ' interpretiert werden können. ' Um angefangene Stunden anzuzeigen: optionalen Parameter ' booVoll auf FALSE setzen ' Beispiele: ' fTageStunden("1.1.1900 23:59") > 2 Tage und 23 Stunden ' fTageStunden(1.06) > 1 Tag und 1 Stunde ' fTageStunden(1.06, False) > 1 Tag und 2 Stunden ' fTageStunden(Summe([Arbeitszeit]) > 9 Tage/e und 9 Stunde/n ' fTageStunden(NULL) > 0 Tage und 0 Stunden ' fTageStunden("Willi Wacker") > #Typ ' Ausgabe : Text im Format Tag/e (Standardzahl) und Stunde/n ' Autor : Raphael Hein ' Datum : 11.09.2020 ' ---------------------------------------------------------------- ' nötigenfalls ein Datum in eine Zahl umwandeln If IsDate(varZeit) Then varZeit = CDbl(CDate(varZeit)) End If If Not booVoll Then ' um angefangene Stunden (mit mindestens 1 Sekunde) zu erhalten, ' eine knappe Stunde dazu addieren varZeit = varZeit + CDbl(CDate("0:59:59")) End If If IsNumeric(varZeit) Then ' Format aus der Zahl formatieren: Vorkommastellen = Tage fTageStunden = Format(Fix(varZeit), "#,##0") & " Tag" _ & IIf(Fix(varZeit) > 1, "e", "") _ & " und " & Format(varZeit, "h") _ & " Stunde" & IIf(Format(varZeit, "h") = "1", "", "n") Else If IsNull(varZeit) Then fTageStunden = "0 Tage und 0 Stunden" Else fTageStunden = "#Typ" End If End If End Function
Beide Funktionen lassen sich leicht an andere Anforderung anpassen.