title image


Smiley Re: Stundenberechnung
Hallo,



Aus http://www.hawo-line.de/tippsaccess1.htm



Zeitberechnung mit mehr als 24 Stunden

Versionen: Access 97 und 2000



Access besitzt kein eingebautes Format, mit dem sich Zeiten von mehr als 24 Stunden darstellen ließen. Wenn Sie zum Beispiel die verstrichene Zeit von 8 Uhr morgens bis 9 Uhr morgens am nächsten Tag berechnen wollen, können Sie die Zeitangaben nicht einfach subtrahieren. Die Differenz würde Access im Zeitformat als "1:00" und nicht als "25:00" darstellen.



Um dennoch die korrekte Dauer auszugeben, müssen Sie die Zeitdifferenz mit der DatDiff-Funktion ermitteln. Damit erhalten Sie die Gesamtdauer in Minuten, und durch ganzzahlige Divisionen kommen Sie von diesem Wert auf die entsprechenden Stunden- und Minutenanteile. Das folgende Beispiel demonstriert die Vorgehensweise:



Beginnen Sie mit einer Tabelle, in der Sie Anfangs- und Endzeiten festhalten. Für eine möglichst fehlerfreie Erfassung empfiehlt sich der Einsatz von getrennten Datums- und Uhrzeitfeldern, so daß sich die Tabelle aus insgesamt vier Feldern zusammensetzt:



1.Feld Anfangsdatum: Datentyp "Datum/Uhrzeit", Format "Datum, lang"

2.Feld Anfangszeit: Datentyp "Datum/Uhrzeit", Format "Zeit, 24Std."

3.Feld Enddatum: Datentyp "Datum/Uhrzeit", Format "Datum, lang"

4.Feld Endzeit: Datentyp "Datum/Uhrzeit", Format "Zeit, 24Std."

Zur Berechnung der Zeitdifferenz setzen Sie eine Abfrage ein, der Sie die eben erstellte Tabelle hinzufügen. In den Abfrageentwurf übernehmen Sie alle vier Felder. In die nächste Spalte des Entwurfs geben Sie ein berechnetes Feld ein, das die Gesamtminuten ermittelt:



Gesamtminuten: DatDiff("n";[Anfangsdatum]+

[Anfangszeit];[Enddatum]+[Endzeit])



Mit dem Parameter "n" liefert die DatDiff-Funktion die Zeitdifferenz in Minuten. Die exakten Anfangs- und Endzeiten erhalten Sie durch die Addition der Datums- und Uhrzeitbestandteile. Für die Zeitspanne von 8:00 bis 9:00 am Folgetag berechnet die Funktion zum Beispiel einen Wert von "1500" (Minuten). Diese Gesamtdauer eignet sich übrigens sehr gut zur Addition mehrerer Zeitdifferenzen.



Um nun aber die Spanne im gewünschten Stunden- und Minutenformat auszugeben, fügen Sie dem Abfrageentwurf ein weiteres berechnetes Feld hinzu. Konkret geben Sie in die nächste Spalte folgenden Ausdruck ein:



Gesamtzeit: [Gesamtminuten]\60 & ":" &

Format([Gesamtminuten] Mod 60;"00")



Die Formel greift auf das Ergebnis des ersten berechneten Feldes, "Gesamtminuten", zurück. Der Operator "\" führt eine ganzzahlige Division durch, so daß Sie mit dem Divisor "60" den Anteil an vollen Stunden erhalten. Demgegenüber ermitteln Sie im Rahmen des Format-Ausdrucks den Modulo, also den Rest der ganzzahligen Division. Das entspricht den Minuten, die in der angebrochenen letzten Stunde verbleiben. Die Format-Funktion dient lediglich dazu, das Ergebnis immer zweistellig auszugeben. Schließlich verketten Sie die beiden Formelergebnisse mit "&"-Operatoren, wobei Sie einen Doppelpunkt als Trennzeichen zwischen Stunden- und Minutenanteil einfügen.



So lautet das Ergebnis des berechneten Feldes "25:00", wenn Sie wieder das Beispiel von 8:00 bis 9:00 am Folgetag zugrunde legen.



Da es sich bei dem formatierten Zeitausdruck jedoch um einen Textwert handelt, können Sie mit ihm keine weiteren Berechnungen anstellen, - beispielsweise um die Gesamtzeiten zu addieren. Wenn Sie wirklich mit Stunden und Minuten rechnen wollen, müssen Sie zwei weitere Felder in die Abfrage einfügen. So läßt sich dann der Stundenanteil in folgendem berechneten Feld ermitteln:



Stundenanteil: DatDiff("h";[Anfangsdatum]+

[Anfangszeit]; [Enddatum]+[Endzeit])



Der Ausdruck ist nahezu identisch mit der DatDiff-Funktion für die Gesamtminuten, nur daß Sie dieses Mal den Parameter "h" einsetzen.



Für den Minutenanteil ergänzen Sie die Abfrage um folgendes Feld:



Minutenanteil: DatDiff("n";[Anfangsdatum]+

[Anfangszeit]; [Enddatum]+[Endzeit]) Mod 60



Da Sie nicht die Gesamtdauer in Minuten berechnen wollen, sondern nur die Minuten nach der letzten vollen Stunde, errechnen Sie mit "Mod 60" den Rest der ganzzahligen Division von Gesamtminuten durch 60. Am besten weisen Sie dem Feld anschließend noch das Format "00" zu, indem Sie es im Abfrageentwurf mit der rechten Maustaste anklicken und über den Kontextmenübefehl Eigenschaften das Format "00" eingeben.



Die Felder "Stundenanteil" und "Minutenanteil" enthalten Zahlenwerte, mit denen Sie beliebige Berechnungen anstellen können.







Dieses kann man auch ganz mit VBA machen!



Gruß Friedhelm






Gruß Friedhelm

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: