Excel / VBA - Datum im Format YYYYMMDD aus einer Zelle lesen, einen Tag abziehen und ausgeben?
Hallo zusammen, ich möchte gerne über VBA einer Date-Variablen den Wert aus einer bestimmten Zelle zuordnen in der Form "YYYYMMDD", einen Tag abziehen und anschließend mittels MsgBox ausgeben. Es steht z.B. in Zelle A2: "20160701" und es soll am Ende "20160630" ausgeben.
Kann mir hier kurz jemand helfen?
1 Antwort
Ein bisschen von hinten durch die Brust ins Auge, aber damit du überhaupt eine Lösung hast:
Sub x() Dim datum As Date Dim sdatum As String sdatum = Range("A2").Value datum = CDate(Left(sdatum, 4) & "-" & Mid(sdatum, 5, 2) & "-" & Right(sdatum, 2)) datum = DateAdd("d", -1, datum) MsgBox Year(datum) & LPad(Month(datum), "0", 2) & LPad(Day(datum), "0", 2) End Sub
Function LPad(s, fuell, laenge) If Len(fuell) > 0 Then While Len(s) < laenge s = s & fuell Wend End If LPad = s End Function
Ui, gut beobachtet!
In LPad muss es heißen:
s = fuell & s, nicht s = s & fuell.
s = s & fuell wäre RPad ;)
Bitteschön!
Du kannst dir mit solchen Funktionen wunderbar eine eigene Bibliothek aufbauen.
Noch ein kleiner Zusatzhinweis. Im Internet habe ich noch die Möglichkeit gefunden, Zahlen mit Format links zu padden:
Format(6, "00")
ergibt "06"
Die Rückkonvertierung funktioniert ebenfalls einfacher mit Format:
Format(datum, "yyyymmdd")
soweit - so gut. fraglich finde ich den parameter für cdate. das format des strings hängt von der lokalen einstellung ab. also wahrscheinlich beim fragesteller die grundeinstellung deutsch. dann erwartet cdate die form dd.mm.yyyy
bei mir würds funktionieren, da ich auf iso eingestellt habe.
Da sich die Formate yyyy-mm-dd und dd.mm.yyyy nicht beißen, sehe ich hier kein Problem. Allerdings wird yyyymmdd nicht automatisch erkannt.
Danke trotzdem für den Hinweis. Viele Programme erwarten strikt die Angabe des Datums im im System hinterlegten Format.
Leider kann man das Format CDate nicht explizit übergeben.
Danke schonmal, es funktioniert soweit, jedoch kommt am Ende "20166030" raus anstatt "20160630". Was muss ich noch ändern, damit es läuft?