HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv
Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
daniel
27.04.2026 13:44:44
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
HI
du musst hier einer Fallunterscheidung machen:
a) Eingabe nur Jahreszahl
b) Eingabe mit Monat und Jahr
c) Eingabe vollständig.

dabei wäre es hilfreich zu wissen, welche Varianten der Datumseingabe alles vorkommen können.
Wenn du es aus dem Internet kopierst, dann müsste es ja halbwegs eindeutig sein.

wichtig wäre, dass du die Werte als TEXT übernimmst, damit Excel nicht schon von alleine anfängt, wie Werte in Datumswerte umzuwandeln.
dh du solltest sie dann auch nicht direkt überschreiben, sondern das ermittelte Datum in die Nachbarzelle schreiben, denn dort willst du dann ja nicht Texte, sondern Zahlen haben.

die Umwandlung mit der Fallunterscheidung könnte dann für einen Wert so aussehen:

dim Eingabe as string

dim Datum as string

Eingabe = ".. dein Datumsstext..."

If Eingabe like "####" Then '--- nur die Jahreszahl
Datum = Cdate("31.12." & Eingabe)
Else If Eingabe like "[JFMASOND]* ####" Then '--- Monat und Jahreszahl am ende
Datum = Worksheetfunction.EoMonth(CDate(Eingabe), 0)
Elseif IsDate(Eingabe) then '--- ale anderen Texte, die wie ein Datum aussehen
Datum = Cdate(Eingabe)
Else
Datum = "Datum nicht ermittelbar
end if
Cells(x, y).FormulaLocal = Datum



Achtung, ich behandle die Variable "Datum" als Textstring, damit ich auch die Fehlermeldung ohne Fehler ausgeben kann.
damit der Text dann von Excel in ein korrekte Datum übernommen wird, sollte man den Wert in die .FormulaLocal-Eigenschaft der Zelle schreiben.
Würde man in .Value schreiben, bräuchte man das amerikanische Format. Das CDate erzeugt aber das deutsche (bzw das Lokale), daher der Wert in .FormulaLocal.

Gruß Daniel
Als Antwort auf diesen Beitrag
snb
27.04.2026 11:40:36
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
Verzichte auf AI.

Private Sub Worksheet_Change(ByVal Target As Range)

If Not Intersect(Target, Columns(5)) Is Nothing Then
Application.EnableEvents = False

For Each it In Target.Cells
If Len(Trim(it)) = 4 And IsNumeric(Trim(it)) Then it.Value = CDate("31-12-" & Trim(it))
If Trim(it) <> "" And Trim(it.Text) <> Format(it, "dd-mm-yyyy") Then it.Value = Application.EoMonth(it, 0)
it.NumberFormat = "DD.MM.YYYY"
Next

Application.EnableEvents = True
End If
End Sub

Folgenachrichten
Antwort auf Beitrag erstellen
Bitte einen Anwendernamen ohne @ eingeben.
Bitte das Passwort eingeben.
Bitte eine gültige E-Mail-Adresse eingeben.
Bitte einen Betreff eingeben.
Weitere Optionen
Aktivieren, wenn die Frage/der Beitrag noch nicht beantwortet wurde und unter Listen > Offene Threads erscheinen soll.
Beispieldatei hochladen

Bitte einen Nachrichtentext eingeben.