Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Rechnen mit Uhrzeiten und Runden

Begonnen von Oldschool, April 15, 2016, 13:01:57

⏪ vorheriges - nächstes ⏩

Oldschool

Hallo Forum,

bin noch ein Frischling was Access betrifft und google konnte mir bisher dabei auch nicht wirklich weiterhelfen.

Ich habe viele viele Exceltabellen. Pro Mitarbeiter jeweils eine für jeden Monat und das immer wieder für jedes Jahr.
Diese müssen gepflegt und entsprechend angelegt werden. Es liegt also nichts näher das nach vielen Jahren über eine Datenbank zu machen. Leider stosse ich bei der Formel schon an meine Grenzen

Datum                     von           bis     Wegezeit          Überstd.min = 100
01.12.2016 / Do             6:00   14:00                     8,00
02.12.2016 / Fr             6:24   10:08                          3,75
03.12.2016 / Sa             22:36   2:10                     3,50
04.12.2016 / So          11:10   12:20                     1,25
05.12.2016 / Mo            18:15   20:30   2 Std          4,25
06.12.2016 / Di             19:30   21:58      1 Std          3,50

In der Spalte "Überstd.min = 100" befindet sich folgende Formel:

=STUNDE(WENN(C6=B6;0;WENN(C6>B6;C6-B6;(C6+24)-B6)))+D6+VRUNDEN((MINUTE(WENN(C6=B6;0;WENN(C6>B6;C6-B6;(C6+24)-B6))));15)/60

In Access habe ich ein Feld VUZ (von Uhrzeit) und BUZ (Bis Uhrzeit) sowie WZ (Wegezeit) definiert.

Was kann ich machen um auf das Ergebnis zu kommen wie das in Excel passiert, da ich das in Access genauso bräuchte.

Vielen Dank für die Hilfe

Beaker s.a.

Hallo Oldschool,
ZitatWas kann ich machen um auf das Ergebnis zu kommen wie das in Excel passiert, da ich das in Access genauso bräuchte.
Schreibe dir eine öffentliche Funktion in einem allgemeinen Modul,
die die Berechnung durchführt (Zellen = Tabellenfelder). Diese Funktion
kannst Du dann in Abfragen aufrufen, um das Ergebnis anzuzeigen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Oldschool

Danke für die schnelle Antwort, leider komme ich jetzt erst wieder zum Schreiben.

Vielleicht könntest du mir das etwas näher erläutern, denn von dem was du da geschrieben hast verstehe ich so gut wie nichts.

Access-Meister vs Newbie (das Newbie darf gerne wörtlich genommen werden)

Ich habe jetzt zwei Access-Kurse gemacht. Einsteiger und Aufbau. Wir haben sogar versucht dieses Problem im Aufbau-Kurs zu lösen aber auf die schnelle haben wir das auch nicht hinbekommen zumal Access scheinbar ohnehin Probleme mit dem Runden hat.

Das Ergebnis wird als Uhrzeit ausgewiesen. Um es in einen Dezimalwert zu bekommen habe ich das gefunden:

ZitatDie Idee mit dem Format "Standardzahl" ist goldrichtig: Ein Datum (samt Uhrzeit) wird intern als Anzahl von Tagen, die Uhrzeit hinterm Komma als Bruchteil eines Tages gespeichert. Eine Stunde ist also 1/24 Tag. Das Ergebnis der Summe im Bericht muß daher nur mit 24 malgenommen werden."

Habe ich aber auch noch nicht so umsetzen können.

Zur Zeit habe ich 2 Felder mit folgenden Formeln in der Tabelle:

Runden([bUZ]-[VUZ]+[WZ];2)

Das war der Versuch die Excel-Formel nachzubauen:

Stunde(Wenn([BUZ]=[VUZ];0;Wenn([BUZ]>[VUZ];[BUZ]-[VUZ];([BUZ]+24)-[VUZ])))+[WZ]+Runden((Minute(Wenn([BUZ]=[VUZ];0;Wenn([BUZ]>[VUZ];[BUZ]-[VUZ];([BUZ]+24)-[BUZ]))));15/60)

DF6GL

#3
Hallo,

erstelle in einem Standard-Modul diese Funktion:

Public Function fktRound25Min(StartTime , EndTime , Optional DriveTime = 0#) As Double
Dim lngDifMin As Long
On Error GoTo MyErr

If EndTime < StartTime Then EndTime = EndTime + 1#

lngDifMin = DateDiff("n", StartTime, EndTime) / 60 * 100 + DriveTime * 100
fktRound25Min = (((lngDifMin + 12) \ 25) * 25) / 100

Exit_F:
Exit Function
MyErr:
'Errorhandler
Resume Exit_F
End Function


und verfahre damit, wie Ekkehard es beschrieben hat
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Moin,
@Franz
Kannst Du mir bitte diesen Terminus erklären: 1#
Danke.

@oldschool
Zitatund verfahre damit, wie Ekkehard es beschrieben hat
Heisst, dass Du im Abfrageentwurf in die Zeile Feld Folgendes einträgst:
Ergebnis:  fktRound25Min([VUZ],[BUZ],[WZ])
Die Felder müssen natürlich in der Abfrage-Quelle vorhanden sein.

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

1#  ist eine (Literal-)Zahl vom Datentyp Double
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Hallo Franz,
O.K., danke.
Dient das # also nur dazu um explizit 1 als Double zu addieren?

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Hallo,

ja,

es ist lediglich meiner Gewohnheit geschuldet, die Datentypen möglichst genau selber zu beachten und sich nicht nur  auf die interne Typkonvertierung zu verlassen..   8)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Oldschool

Vielen, vielen Dank für die Antworten  :)

Ich habe den Code kopiert und ihn in ein öffentliches Modul gepackt. Das Modul habe ich gespeichert und finde es ab jetzt in meiner Tabelle unter "Module" unter dem Namen Uhrzeit_STW.

Ich habe eine Abfrage gemacht mit den Feldern: Datum, VUZ, BUZ und WZ. In das Feld daneben habe ich dann die Formel kopiert "Ergebnis: fktRound25Min([VUZ],[BUZ],[WZ])"
bekomme jetzt aber eine Meldung die da heißt: Der von Ihnen eingebene Ausdruck ist syntaktisch falsch.

Gedacht ist es so, das später verschiedene Mitarbeiter, die diese Daten erfassen sollen, ja nicht unbedingt eine Abfrage machen, um das Ergebnis ihrer Eingabe zu sehen. Ich habe mir das eher so vorgestellt, das die Mitarbeiter die Daten in einem Formular erfassen und der Wert dann in die Tabelle geschrieben wird, der Mitarbeiter vorab das Ergebnis im Formular sieht, also sobald er die Daten erfasst hat.

Aktuell habe ich es in zwei Tabellen normalisiert. Eine mit den Mitarbeitern und die Tabelle mit den Daten aus der Exceltabelle.

Habe mal ein Screenshot davon gemacht.


DF6GL

Hallo,

schreib so:

Ergebnis: fktRound25Min([VUZ];[BUZ];[WZ])


Die Funktion muss nicht in einer Abfrage verwendet werden.  Überall da, wo sie gebraucht wird, steht sie zur Verfügung. Demzufolge kann sie auch in einem Formular während der Eingabe eingesetzt sein.  Allerdings wäre vom Speichern des Funktionsergebnisses (aus Gründen von Aktualität und Integrität) in ein Tabellenfeld abzuraten. 
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Beaker s.a.

Da hat wohl meine Shift-Taste geklemmt ;)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

Oldschool

Langsam wird es  :) Vielen Dank euch beiden.

Habe jetzt mal etwas rumgebastelt und das Ganze in ein Formular gepackt. Die Wegezeit scheint er beim Berechnen aber gar nicht zu beachten, wenn ich es richtig verstehe, muss die Wegezeit auch mindestens mit 00:00:00 befüllt werden das er überhaupt rechnet.

Es sei denn ich sehe das Ergebnis grundsätzlich erst dann wenn ich einen Datensatz zurück gehe. Kann man das so machen, das man die Wegezeit mit einer simplen 1 oder 2 erfasst und er das dann einfach mitrechnet?

Habe noch mal einen Screenshot gemacht.

DF6GL

Hallo,

behandle NULL-Werte mit der nz()-Funktion:

fktRound25Min([VUZ];[BUZ];nz([WZ],0))

Zitat
oder ändere die Funktion so ab:

.
.
.
On Error GoTo MyErr
DriveTime = Nz(DriveTime, 0)
If EndTime < StartTime Then EndTime = EndTime + 1#
.
.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access