Datum-Import (US/DE) ohne Trenner

Import (oder Eingabe) kalendarischer Daten (US oder DE) ohne Trennzeichen zu Datum

Mitunter wer­den durch einen Import oder auch bei Eingabe per Hand kalen­darische Dat­en erzeugt, die ohne jeglich­es Trennze­ichen sind. Also beispiel­sweise im For­mat JJJJMMTT (US) oder TTMMJJJJ (DE). Da stellt sich vielfach die Frage, wie solch ein Datum in die typ­is­che, gewohnte Schreib­weise umge­wan­delt wer­den kann.

Prinzipiell …

Prinzip­iell gilt, dass es ohne Makro/VBA keinen direk­ten Weg zur Umwand­lung gibt. Sie wer­den immer eine Hil­f­ss­palte ver­wen­den, um die Werte neu zu berech­nen. Dieses ist in den Beispie­len immer die Spalte B; die Aus­gangswerte ste­hen in Spalte A. Die umge­wan­del­ten Dat­en wer­den im kor­rek­ten Datums­for­mat (als serielle Zahl) in die Zellen geschrieben, damit sind dann auch Berech­nun­gen möglich. Im Anschluss ist es hil­fre­ich, diese Werte in Spalte A als Wert zu kopieren und die Hil­f­ss­palte danach zu löschen.

Beim Import ist es aus­ge­sprochen hil­fre­ich, wenn die Spalte mit dem zu importieren­den Datum als Text definiert wird. So wird gewährleis­tet, dass beim For­mat TTMMJJJ keine führende Null unter­schla­gen wird. Der 1. Jan­u­ar 2015 bleibt dann 01012015 oder 010115 und wird nicht zu ein­er Zahl 1012015 gekürzt. Sollte das nicht möglich sein, dann ist die TEXT()-Funk­tion eine große Hil­fe. 

Jahr 4‑stellig, US

Das bedeutet, dass für den 1.5.2015 die Zif­fer­n­folge 20150501 in A1 ste­ht. Die beste Möglichkeit der Berech­nung in B1:
=DATUM(LINKS(A1; 4); TEIL(A1; 5; 2); RECHTS(A1; 2))
Damit wird ein echt­es Datum erzeugt, welch­es richtig for­matiert ist und mit dem natür­lich auch gerech­net wer­den kann.

Jahr 4‑stellig, DE

Prinzip­iell ist hier und bei den weit­eren vorgestell­ten Lösungswe­gen auf der Tabellen-Basis genau wie eben beschrieben. In diesem Fall ist nur die Rei­hen­folge eine andere:
=DATUM(RECHTS(A1; 4); TEIL(A1; 3; 2); LINKS(A1; 2))
und Sie haben ein Datum als Ergeb­nis.

Jahr 2‑stellig

Ach hier ist das Vorge­hen grund­sät­zlich iden­tisch. Allerd­ings sind die Werte in der jew­eili­gen Funk­tion etwas angepasst. Hier direkt untere­inan­der die Formeln für US und danach für DE:
=DATUM(LINKS(A1; 2); TEIL(A1; 3; 2); RECHTS(A1; 2))
=DATUM(RECHTS(A1; 2); TEIL(A1; 3; 2); LINKS(A1; 2))

Import als numerische Werte

Wenn es sich denn nicht umge­hen lässt und die importierten kalen­darischen Dat­en als Zahl vor­liegen, dann wer­den ja führende Nullen abgeschnit­ten. Bei US-Datum ist das ja nicht schlimm, weil das vier­stel­lige Jahr keine führende Null haben kann (das zweis­tel­lige aber sehr wohl). Beim DE-Datum ist das die Regel, wenn der Tag vor dem 10. liegt. In A1 würde dann ste­hen: 1052015 wenn der 1. Mai gemeint ist.

Hier bietet sich an, nicht allzu viel mit WENN() zu arbeit­en son­dern kon­se­quent davon auszuge­hen, dass die führende Null fehlen kann. Für das eben genan­nte Datum würde die Formel beim deutschen Datum mit vier­stel­ligem Jahr dann beispiel­sweise so ausse­hen:
=DATUM(RECHTS(A1; 4); LINKS(RECHTS(A1; 6); 2); LINKS(RECHTS("0" & A1; 8); 2))
und alter­na­tiv eine weit­ere Formel ohne WENN():
=DATUM(RECHTS(A1; 4); TEIL(A1; 3-N(LÄNGE(A1)=7); 2); LINKS(RECHTS("0" & A1; 8); 2))
… die aber gewiss nicht Jed­er­manns Sache ist.  😉

Und falls Sie (doch) das WENN() ver­wen­den wollen, dann prüfen Sie die Anzahl der Stellen in A1. Sind es 7 Stellen (bzw. 5 bei kurzem Datum), dann muss bei allen links begin­nen­den Zählweisen eine 0 voran geset­zt wer­den.

Per Makro (VBA)

Eigentlich viel uni­verseller geht es per Makro. Wobei „Makro” nicht in jedem Fall der kor­rek­te Begriff ist, es han­delt sich um eine benutzerdefinierte Funk­tion (UDF). Wie Sie solch eine Funk­tion in Ihr Pro­jekt ein­binden, kön­nen Sie an dieser Stelle nach­le­sen.

Option Explicit

Function DatumOhneTrenner(Datum, Optional LC As Variant)
   Dim x As Variant
   
   If IsMissing(LC) Then LC = "US"
   If Len(Datum) < 5 Or Len(Datum) > 8 Then
      MsgBox "Der Wert kann nicht in ein Datum umgewandelt werden!", _
       vbCritical + vbOKOnly, "Fehler"
      DatumOhneTrenner = ""
      Exit Function
   End If
   
   If UCase(LC) = "US" Then
      x = Left(Datum, 4) & "/" & Mid(Datum, 5, 2) & "/" & Mid(Datum, 7, 2)
      If Not IsDate(x) Then
         MsgBox "Der Wert kann nicht in ein Datum umgewandelt werden!", _
          vbCritical + vbOKOnly, "Fehler"
         DatumOhneTrenner = ""
         Exit Function
      End If
      DatumOhneTrenner = CDate(x)
      Exit Function
   Else
      If Len(Datum) = 5 Or Len(Datum) = 7 Then Datum = "0" & Datum
      x = Left(Datum, 2) & "." & Mid(Datum, 3, 2) & "." & Mid(Datum, 5, 4)
      If Not IsDate(x) Then
         MsgBox "Der Wert kann nicht in ein Datum umgewandelt werden!", _
          vbCritical + vbOKOnly, "Fehler"
         DatumOhneTrenner = ""
         Exit Function
      End If
      DatumOhneTrenner = CDate(x)
      Exit Function
   End If
   'Platz für weitere Prüfungen oder Routinen (darum auch das Exit Function hierüber)
End Function

Das sieht auf den ersten Blick vielle­icht recht umfan­gre­ich aus, aber dafür ist der Code möglichst trans­par­ent gehal­ten. Und eines ist dabei ganz anders als bei der Formel-Lösung im Daten­blatt: Hier wird grundle­gend geprüft, ob dort eventuell ein fehler­haftes Datum in der entsprechen­den Zelle existiert.

Der Aufruf erfol­gt so:
=DatumOhneTrenner(Datum ; ["US"]/["DE"])
wobei das erste Argu­ment ein direkt eingegebenes Datum (natür­lich ohne Tren­ner) oder eine Zel­ladresse sein kann. Der zweite Para­me­ter ist ein optionaler Text und stellt die Lan­desken­nung dar. Beispiel für das DE-For­mat:
=DatumOhneTrenner(A1; "DE")
Geben Sie zweite Argu­ment nicht ein,  dann set­zt die Funk­tion automa­tisch das US-For­mat voraus.

 Natür­lich wäre es möglich, ein Makro zu ver­wen­den, welch­es Zelle für Zelle in einem benan­nten oder markierten Bere­ich solch eine Umwand­lung direkt vorn­immt, also ohne Hil­f­ss­palte. Wir lehnen das ab, da so jegliche Kon­trollmöglichkeit fehlt, ob die Umwand­lung kor­rekt ist. Angenom­men in A1 ste­ht 101112. Und der Aufruf der Funk­tion erfol­gt hier so: 
=DatumOhneTrenner(A1)
dann wird das Ergeb­nis natür­lich 12.11.2010 sein. Vielle­icht sollte es aber doch der 10.11.2012 sein, weil es eigentlich das deutsche Datums­for­mat war? Und wenn das bei ein­er ganzen markierten Spalte passiert, dann wird unter Umstän­den mit schön­er Regelmäßigkeit die Fehler­mel­dung auf­plop­pen und die Zellen sind dann auch noch leer. Da ist es doch bess­er, die Werte rasch zu über­prüfen und dann zu kopieren.

Ach ja, falls Ihnen der Name der Funk­tion zu lang ist, kön­nen Sie ihn nach Belieben ändern. Beispiel­sweise DoT (als Abkürzung). In dem Fall müssen Sie aber jedes Vorkom­men des Funk­tion­sna­mens erset­zen.

[NachOben­Let­zte Verweis=„ML, T&T: Datu­mOhne­Tren­ner umwan­deln”]
Dieser Beitrag wurde unter Datum und Zeit, Excel-Funktionen, Mit VBA/Makro, Ohne Makro/VBA, Tabelle und Zelle, Text, Tipps und Tricks abgelegt und mit , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.