Registriert seit: 01.03.2016
Version(en): 2016
13.06.2017, 12:47
(Dieser Beitrag wurde zuletzt bearbeitet: 13.06.2017, 12:48 von Elke Boese.)
Hallo,
bezüglich der Zeitberechnungen möchte ich von euch folgendes wissen:
1. Wie berechnet man per VBA bei einem gegebenem Datum, der wievielte Tag des Jahres es ist?
2. Wenn ich 2 Datumwerte gegeben habe, wie berechne ich dann per VBA die Differenz in Tagen?
Danke.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin!
1.:
Code:
MsgBox "Heute ist der " & Date - DateSerial(Year(Date), 1, 0) & "ste Tag des Jahres"
Die zweite Frage hast Du hoffentlich nicht Ernst gemeint, oder?
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 01.03.2016
Version(en): 2016
@Ralf
a. Danke
b. So trivial ist die Zeitdifferenz zwischen 2 Tagen aber auch nicht oder? - Für euch Experten natürlich schon, aber ich musste nachschlagen!
Debug.Print DateDiff("d", "01.01.2017", "13.06.2017")
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Moin!
Zitat:So trivial ist die Zeitdifferenz zwischen 2 Tagen aber auch nicht oder?
Doch, ist sie! :19:
Datediff() mit "d" ist Quatsch!
Code:
Debug.Print DatumSpaet - DatumFrueh
(Deins ermittelt übrigens nicht den x-ten Tag des Jahres)
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 01.03.2016
Version(en): 2016
@Ralf
Code:
Debug.Print DatumSpaet - DatumFrueh
Erkläre das bitte einer VBA - Analphabetin etwas ausführlicher.
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
Gerne!
(das Debug.Print hast Du ja selbst in Deinem Code, daher habe ich das ohne Erklärung übernommen)
Du solltest die Daten in Variablen speichern und den Datumstext explizit mittels CDate() in ein Datum umwandeln.
Dann bist Du immer auf der sicheren Seite.
Und wie bereits geschrieben:
Datediff() mit "d" ist flüssiger als Wasser!
Code:
Sub RPP()
Dim DatumSpaet As Date, DatumFrueh As Date
DatumSpaet = CDate("13.06.2017")
DatumFrueh = CDate("01.01.2017")
Debug.Print DatumSpaet - DatumFrueh
End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Elke,
Sub aaa()
Debug.Print DateDiff("d", "01.01.2017", "13.06.2017")
Debug.Print CDate("13.06.2017") - CDate("01.01.2017")
End Sub
@Ralf, warum ist DateDiff Quatsch?
Gruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Elke Boese
Registriert seit: 12.10.2014
Version(en): 365 Insider (64 Bit)
13.06.2017, 14:09
(Dieser Beitrag wurde zuletzt bearbeitet: 13.06.2017, 14:09 von RPP63.)
Ich schrieb, dass Datediff mit dem Argument "d" Quatsch ist.
(nicht für Dich, Uwe):
Datum ist eine serielle Ganzzahl,
daher ist die Differenz zweier Daten in Tagen eine simple Subtraktion beider Daten.
Dafür brauche ich doch keine extra Funktion?
Datediff() mit den anderen Argumenten hat ja seine Berechtigung, aber ich bleibe dabei, dass "d" hier überflüssig ist.
Edit:
Gut Datediff wandelt einen String in ein Datum, aber in einem Programm wandel ich dies selber um.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Folgende(r) 1 Nutzer sagt Danke an RPP63 für diesen Beitrag:1 Nutzer sagt Danke an RPP63 für diesen Beitrag 28
• Elke Boese
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
mal noch ein Hinweis. Datediff liefert nicht unbedingt das gleiche wie die Subtraktion.
Wende Datediff z.B. mal auf 15.06.17 23:59 bis 16.06.17 00:01 an und auf 16.06.17 00:01 bis 16.06.17 23:59. Vergleiche das dann mit der Subtraktion

Je nach Fragestellung kann das aber auch angewendet werden.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)