Excel / VBA - Datum im Format YYYYMMDD aus einer Zelle lesen, einen Tag abziehen und ausgeben?

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
Woher ich das weiß:Berufserfahrung – Programmierer
maximilianus7  15.06.2016, 13:02

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.

0
Suboptimierer  15.06.2016, 13:08
@maximilianus7

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.

0
Herzbube27 
Fragesteller
 15.06.2016, 13:17

Danke schonmal, es funktioniert soweit, jedoch kommt am Ende "20166030" raus anstatt "20160630". Was muss ich noch ändern, damit es läuft?

1
Suboptimierer  15.06.2016, 13:20
@Herzbube27

Ui, gut beobachtet!

In LPad muss es heißen:

s = fuell & s, nicht s = s & fuell.

s = s & fuell wäre RPad ;)

1
Suboptimierer  15.06.2016, 13:22
@Herzbube27

Bitteschön!

Du kannst dir mit solchen Funktionen wunderbar eine eigene Bibliothek aufbauen.

0
Suboptimierer  15.06.2016, 13:29
@Herzbube27

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")
1