Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Laufzeitenberechnung mit hunderstel

Begonnen von quini, Februar 04, 2025, 19:09:22

⏪ vorheriges - nächstes ⏩

quini

Hallo liebe Accessspezialisten!

In diesem Forum konnte ich bereits viele Tricks und Hilfestellungen erhalten. Nachdem ich bereits viel Zeit in der Suche und ausprobieren verbracht habe möchte ich mein Anliegen hier einbringen:

Ich habe eine Datenbank erstellt, wo ich mit Laufzeiten aus der Zeitnehmung rechnen möchte. Aus der Zeitnehmung erhalte ich einen String mit folgender Zeichenfolge: 1:12,98 (1 Minute, 12 Sekunden, 98 Hunderstel). Wie kann ich im VBA diesen String so aufteilen, dass ich die Zeiten addieren kann?

Vielen Dank schon mal im voraus für Eure Unterstützung.

lg quini

knobbi38

Du kannst die Zeitangabe in Hundertstel konvertieren, dann damit Rechnen  und anschließend zurück konvertieren.


quini

Guten Morgen! Vielen Dank für die schnelle Antwort. Zur Sicherheit: Habe ich das so richtig gerechnet?

String aus Zeitnehmung                                  Umgewandelte Zeit
hh   mm   ss   hh            hh   mm   ss   hh   Zeitsumme
0   1   12   98            0   6000   1200   98   7298
0   0   47   12            0   0   4700   12   4712

lg quini

knobbi38

Hallo,

Windows enthält auch einen Taschenrechner (calc), der mit Umrechnungen umgehen kann. Damit kannst du das selber überprüfen. Wenn du anstatt mit hundertstel Sekunden gleich Millisekunden verwendest, würdest du eine gängigere Maßeinheit verwenden und könntest diese auch als Zahl abspeichern und nur für die Anzeige in eine lesbare Form konvertieren.

Gruß
Knobbi38

werner budde

nachfolgende Funktion ermittelt die Hundertstel Sekunden als Long:
Function Zeitstring_Umwandlung(Zeit_String As String)

  Dim str_Minute As String
  Dim str_Sekunde As String
  Dim str_Hund_Sekunde As String
 
  str_Minute = Val(Zeit_String)
  str_Sekunde = Val(Mid(Zeit_String, Len(str_Minute) + 2))
  str_Hund_Sekunde = Val(Mid(Zeit_String, Len(str_Minute) + 1 + Len(str_Sekunde) + 2))
  Zeitstring_Umwandlung = str_Minute * 6000 + str_Sekunde * 100 + str_Hund_Sekunde

End Function
Zu Deiner Vorgabe 1:12,98 liefert die Funktion dann 7298, also 7298 Hundertstel Sekunden.
Du kannst ja ggf. das Funktionsergebnis wieder durch 100 teilen, um Sekunden mit Nachkommastellen zu bekommen.
Gruß Werner

quini

Hallo Werner!

Herzlichen Dank! Habe die Daten rechenbar nun vorliegen und kann sie addieren. Ich bin jetzt nur noch am hirnen, wie ich die Zahl in das lesbare Zeitformat 00:00:00,00 zurückbringe. Bin in der Internetsuche noch nicht fündig geworden. Hast Du für mich hier noch einen Ablauf?

LG quini

werner budde

#6
Function Zeitstring_Umw_Dat_Format(Zeit_String As String)

  Dim str_Minute As String
  Dim str_Sekunde As String
  Dim str_Hund_Sekunde As String
 
  str_Minute = Val(Zeit_String)
  str_Sekunde = Val(Mid(Zeit_String, Len(str_Minute) + 2))
  str_Hund_Sekunde = Val(Mid(Zeit_String, Len(str_Minute) + 1 + Len(str_Sekunde) + 2))
   
  Zeitstring_Umw_Dat_Format = "00:" & str_Minute & ":" & str_Sekunde & "," & str_Hund_Sekunde

End Function

liefert bei der Vorgabe "1:12,98" den Rückgabewert 00:01:12,98

Aber Achtung: ab dem Komma ist das kein Datumsformat, mit dem man noch rechnen kann.
Für Textfelder mit rein dokumentarischem Charakter in Abfragen, Formularen oder Berichten könnte man diesen Rückgabewert aber verwenden.


Gruß Werner

knobbi38

Hallo quini,

ist jetzt nicht dein ernst, oder? Internetsuche anstatt selber mal ein bißchen Rechnen mit den Grundrechenarten?

Wo haperst es denn?


quini

Rechnen ist kein Problem. Nur wenn ich das bei über 100 Teilnehmern mache, wird es bis zur Preisverteilung dauern. Im Excel geht das ja gut, aber Access ist hier etwas anders und ein wenig VBA-Kenntnisse habe ich durch Eigenstudium erlernt Übrigens: Bevor ich frage suche ich schon im Internet. Eventuell habe ich die Suchfrage falsch gestellt.

Der letzte Weg ist das Forum, dachte dass ich da Hilfe bekomme. Für Werner war die Antwort kein Problem.

quini

Hallo Werner!

Vielen Dank für deine Hilfe. Ja, es geht hier nur um die Darstellung für die Ergebnisliste. Rechnen tue ich vorher mit den Millisekunden.

lg quini

knobbi38

Hallo Quini,

es geht hier nicht um das Suchen, selber machen ist gefragt und VBA und die Grundrechenarten sind mit Excel wohl identisch.
Wenn du nun also weißt, wie die Zeit von einem String in eine Zahl mit Hundertstel Sekunden konvertiert wird, sollte die Umkehrung der Rechenarten jetzt nicht mehr das Problem sein. Wie würdest du das denn auf dem Papier manuell machen?

Wo bleibt das Erfolgserlebnis, wenn du es zumindest nicht mal versuchst. Auch wenn es nicht elegant sein sollte, bei der Hilfe zum optimieren stehen die Helfer sicherlich gerne bereit.

Grüße
Knobbi38

Beaker s.a.

Hallo Werner,
Zitatermittelt die Hundertstel Sekunden als Long:
Das ist m.E. nicht richtig.
Da du den Rückgabewert nicht typisiert hast, wird ein Variant zurück
gegeben. Kann natürlich nützlich sein, falls NULL-Werte vorkommen
können, ansonsten
Function Zeitstring_Umwandlung(Zeit_String As String) As Longbzw.
Function Zeitstring_Umw_Dat_Format(Zeit_String As String) As Stringgruss 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)

werner budde

@ Ekkehard,
Stimmt, wo Du recht hast, da haste recht. ;)
Gruß Werner

werner budde

mal getestet:
ohne Typisierung des Rückgabewertes:
debug.print vartype(Zeitstring_Umwandlung("1:12,98")) liefert 3 ( = vblong)
debug.print vartype(Zeitstring_Umwandlung("XYZ")) liefert 5 ( = vbDouble)
debug.print vartype(Function Zeitstring_Umwandlung(null)) --> Fehlermeldung "unzulässige Verwendung von Null"

mit Typisierung des Rückgabewertes (as long):
debug.print vartype(Zeitstring_Umwandlung("1:12,98")) liefert 3 ( = vblong)
debug.print vartype(Zeitstring_Umwandlung("XYZ")) liefert 3 ( = vblong)
debug.print vartype(Function Zeitstring_Umwandlung(null)) --> Fehlermeldung "unzulässige Verwendung von Null"
Gruß Werner

quini

Hallo miteiander!

Vorerst meinen herzlichen Dank an alle, die mir weiterhelfen. Da ich nur ein Hobbyprogrammierer in Access bin, bin ich jetzt komplett ausgestiegen - kurz gesagt ich habe die Rückrechnung in VBA nicht kapiert - Sorry.

Ich lasse das mal so stehen und ich werde nach dem Rennen die errechneten Millisekunden händisch je Teilnehmer ausrechnen.

lg quini