HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Entdecke rund 2 Millionen Excel-Lösungen im
Forumsarchiv

Beiträge zum Thread: Datum bei Eingabe automatisch konvertieren

Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Ringberger
26.05.2026 01:56:53
Datum bei Eingabe automatisch konvertieren
Hallo an alle Hilfsbereiten,

ich bin mal wieder mit meinem Latein am Ende. Wenn in der entsprechenden Zelle das Datum eingetragen wird, soll das immer im Format "TT.MM.JJ" erscheinen. Unabhängig davon, ob es ttmmjj oder tt.mm.jj eingegeben wird. Anschließend soll bei Betätigen der TAB-Taste der Cursor zwei Zellen weiter nach rechts springen. Im beigefügten Makro funktioniert der Fall 1 (Eingabe tt.mm.jj), bei Fall 2 (Eingabe als ttmmjj) bin ich am verzweifeln. Kann mir da jemand helfen?
Public Sub DatumManuell(ByVal Target As Range)


Dim Eingabe As String
Dim TempDatum As String
Dim EchtesDatum As Date
Dim Datum As Date
Dim i As Integer
Dim jahr As Integer
Dim monat As Integer
Dim tag As Integer
jahr = year(Date)
monat = month(Date)
tag = day(Date)

Eingabe = Trim(Target.Value)

Application.EnableEvents = False

' Fall 1: Eingabe hat bereits Punkte
If InStr(Eingabe, ".") > 0 Then

' Überprüfen ob ein oder mehrere Punkte in der Eingabe sind
If IsNumeric(Eingabe) Then
Dim eingabeteil As String
Dim teileliste As Variant
teileliste = Split(Eingabe, ".")
For i = 0 To UBound(teileliste)
eingabeteil = teileliste(i)
If eingabeteil <> "" And IsNumeric(eingabeteil) Then
If i = 0 Then
tag = eingabeteil
ElseIf i = 1 Then
monat = eingabeteil
ElseIf i = 2 Then
jahr = eingabeteil
Else
MsgBox "Eingabe ist kein Datum !!!"
Application.EnableEvents = False
Target.Value = ""
Target.Select
Application.EnableEvents = True
Exit Sub
End If
End If
Next
Datum = DateSerial(jahr, monat, tag)
Application.EnableEvents = False
Target.Value = Datum
Target.Offset(0, 2).Select
Application.EnableEvents = True
Exit Sub
End If
' Fall 2: Eingabe ist genau 6-stellig ohne Punkte (z.B. 010126)
Else

If Len(Eingabe) = 6 And IsNumeric(Eingabe) Then
TempDatum = Left(Eingabe, 2) & "." & Mid(Eingabe, 3, 2) & "." & Right(Eingabe, 2)

If IsDate(TempDatum) Then
Target.Value = CDate(TempDatum)
Target.NumberFormat = "dd.mm.yy"
Else
GoTo FehlerMeldung
End If

FehlerMeldung:
MsgBox "Datum nur im Format TTMMJJ oder TT.MM.JJ eingeben", vbCritical, "Fehler Datum"
Target.ClearContents
Application.EnableEvents = True

If tag = 0 Or tag > 31 Then
'MsgBox "Der Tag liegt außerhalb des gültigen Bereichs! (1 - 31)", vbExclamation, "Fehler Datum"
'Application.EnableEvents = False
'Target.Value = ""
'Target.Select
'Application.EnableEvents = True
Exit Sub
ElseIf monat = 0 Or monat > 12 Then
'MsgBox "Der Monat liegt außerhalb des gültigen Bereichs! (1 - 12)", vbExclamation, "Fehler Datum"
'Application.EnableEvents = False
'Target.Value = ""
'Target.Select
'Application.EnableEvents = True
Exit Sub
End If

' Gültigkeit prüfen
On Error Resume Next
Datum = DateSerial(jahr, monat, tag)
On Error GoTo 0

If IsDate(Datum) Then
Application.EnableEvents = False
Target = Datum
Target.Offset(0, 2).Select
Application.EnableEvents = True
End If
End If
End If

End Sub
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
RPP63
26.05.2026 05:34:45
AW: Datum bei Eingabe automatisch konvertieren
Moin!
Ich muss Dich enttäuschen!
Fall1 (Eingabe als TT.MM.JJ) funktioniert nur, weil das Makro eben nicht funktioniert.
Man kann sich kein "eigenes" Ereignismakro erstellen.
Lies Dir dies mal durch:
https://www.online-excel.de/excel/singsel_vba10f7.html?f=160

Von mir keine Lösung, sondern "nur" ein Tipp aus jahrzehntelanger Erfahrung.
Eine Datumseingabe als TT.MM.JJ ist durchaus mühsam.
Ich gebe Daten ausschließlich mittels Ziffernblock ein und nehme als (gültigen!) Datumstrenner entweder ein - oder ein /
(die sich auf dem Ziffernblock befinden)
Eine Eingabe als T-M oder T/M ergibt ein (fixes!) Datum des aktuellen Jahres.
5-6 → 05.06.2026
Ist das Jahr abweichend, erfolgt die Eingabe als T-M-JJ
3/5/63 → 03.05.1963

Gruß Ralf
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Marc
28.05.2026 16:19:31
AW: Datum bei Eingabe automatisch konvertieren
Wo ist denn die Datumangabe mit TT.MM.JJ mühsam?

also da die meisten eine deutsche Excel version nutzen wird 05.07 automatisch mit deutschem Format erkannt. da habe ich nirgends Probleme weder Excel noch VBA noch ACCESS
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
daniel
28.05.2026 17:09:06
AW: Datum bei Eingabe automatisch konvertieren
naja du hast den Punkt für das Datum nicht auf dem Zehnerblock und musst bei der Eingabe eines Datums immer zwischen den beiden Teilen der Tastatur wechseln.
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
RPP63
29.05.2026 10:03:47
AW: Datum bei Eingabe automatisch konvertieren
Moin Marc!
»Wo ist denn die Datumangabe mit TT.MM.JJ mühsam?«

Kleine Anekdote:
Ich habe mal in der Logistik der größten regionalen Tageszeitung Deutschlands gearbeitet.
Die Urlaubs- und Krankheitsvertretungen der ca. 5.000 Zusteller wurden in Excel-Tabellen gepflegt und von den Teamleitern eingetragen.
Die Daten (Plural von Datum) wurden ausnahmslos mittels Ziffernzeile und Punkt im Format TT.MM.JJJJ eingetippt …

Ich werde niemals die Blicke vergessen, als ich den Teamleitern vorschlug, mal 5/8 (mittels Ziffernblock) in eine Datumszelle einzugeben. ;)

Jetzt darf man ausrechnen, welche Zeitersparnis bei ca. 50.000 einzugebenden Daten durch diese Möglichkeit resultierte.
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
snb
26.05.2026 09:35:54
AW: Datum bei Eingabe automatisch konvertieren
Man sollte sich gewöhnen das ISO-format yyyy-mm-dd zu verwenden.
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
xlKing
26.05.2026 19:08:16
AW: Datum bei Eingabe automatisch konvertieren
Hi Ringberger,

an dem Problem habe ich mir im Lauf der letzten Jahre auch schon mehrfach die Zähne ausgebissen und bis heute keine zufriedenstellende Lösung gefunden, die alle möglichen Eingaben berücksichtigt. Grund: Ereignismakros wie Worksheet_Change springen erst an, nach dem die Zelle deine Eingabe angenommen hat. Wenn du also eine 6-stellige Zahl eingibst, dann hast du zunächst mal eine Zahl in der Zelle stehen und gleichzeitig ein Datum. Das sind aber zwei verschiedene Werte. Da das Datum nur ein Zahlenformat ist, das auf fortlaufenden Zahlen basiert, ergibt die Eingabe 260526 den 17.04.2613. Die Eingabe 041283 (z.B. ein Geburtsdatum) würde den 09.01.2013 ergeben. Du musst also irgendwie verifizieren, welcher der beiden Werte für dich ein gültiges und welcher ein ungültiges Datum darstellt. Wenn du also weißt, dass Geburtsdaten z.B. nur vor dem Jahr 2010 gültig sind. kanns du Falschausgaben des Systems mit dem Worksheet_Change-Makro überarbeiten, indem du die Zahl der Zelle (nicht das Datum) über Target.Value2 wieder ausliest, mit String-Funktionen auseinanderdröselst und über DateSerial wieder eintragen lässt.

Das klappt aber nur, wenn du immer mindestens 5 bzw. 6 stellige Zahlen eingibst. Bei weniger als 5 Stellen kann z.B. die Eingabe 305 entweder der 03.05. des aktuellen Jahres oder aber der 01.03.2005 sein. Da ich selbst gern nur 3 bzw. 4 stellige Daten eingebe und das Jahr automatisch ergänzen lasse, fällt diese Option bei deinem Makro schon mal weg.

Vorschlag: mach es Userabhängig: Wenn User1 es bevorzugt Die Datumsangaben ohne Punkt einzutragen, dann soll er es auch immer so machen. User2, der den klassischen weg geht, kann dann weiterhin normale Datums-Eingaben machen.

Gruß Mr. K.
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
daniel
26.05.2026 22:17:04
AW: Datum bei Eingabe automatisch konvertieren
Hi
schwierig.
das Problem ist, dass Excel schon direkt nach der Eingabe dein Wert verändert (also in ein Datum wandelt, falls das möglich ist), bevor du überprüfen kannst, was da eingegeben wurde. Außerdem reagiert es beim reinen Zahlenwert unterschiedlich, je nach dem ob die Zelle noch "jungfräulich" ist oder ob da schon mal ein Datum drin stand und die Zelle schon das Format "Datum" hat.

die Lösung wäre, dass man die Zelle vor der Eingabe (dh im SelectionChange-Event) mit dem Zahlenformat TEXT formatiert.
dann bleibt die Eingabe zunächst unverändert und du dann dann im Change-Event prüfen, was eingegeben wurde und entsprechend reagieren.
Die Schwierigkeit besteht dann darin, dass das Zahlenformat TEXT ja nicht bleiben darf, wenn du die Zelle wieder verlässt.

hier mal der entsprechende Code für die beiden Makros.
das ganze ist nur "scharf" für die Spalte 1, aber das kannst du dir ja leicht selber anpassen (if target.column = 1)


kopiere dir diesen Code ins Modul des Tabellenblatts und probiere mal aus:

Option Explicit

Public ZelleAlt As String
Public FormatAlt As String

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
If Target.CountLarge = 1 Then
Application.EnableEvents = False
Target.NumberFormat = "dd.mm.yy"
If Target.Value Like "##.##.##" Or Target.Value Like "##.##.####" Then
Target.FormulaLocal = Target.Value
ZelleAlt = ""
Target.Offset(0, 2).Select
ElseIf Target.Value Like "######" Then
Target.FormulaLocal = Format(Target.Value, "00\.00\.00")
ZelleAlt = ""
Target.Offset(0, 2).Select
Else
Target.NumberFormat = FormatAlt
Target.Formula = Target.Formula
End If
Application.EnableEvents = True
End If
End If
End Sub


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If ZelleAlt <> "" Then
Range(ZelleAlt).NumberFormat = FormatAlt
ZelleAlt = ""
End If

If Target.Column = 1 Then
If Target.CountLarge = 1 Then
ZelleAlt = Target.Address(0, 0)
FormatAlt = Target.NumberFormat
Target.NumberFormat = "@"
End If
Else
ZelleAlt = ""
End If



Gruß Daniel
Forumbeitrag
Excel-Version des Fragestellers:
2022
Erfahrungslevel des Fragestellers:
VBA nur mit Recorder
Case
27.05.2026 08:38:48
Eine Alternative ist die...
Moin, :-)

... API-Funktion "VarDateFromStr": ;-)
https://learn.microsoft.com/en-us/windows/win32/api/oleauto/nf-oleauto-vardatefromstr

Dieser kannst du sagen - nimm die lokalen Einstellungen. ;-)
Und die Funktion retuniert ein Ergebnis (damit kannst du auch Fehler erkennen). ;-)

Wenn du allerdings "nur" aktuelle Daten und immer 6stellig eingibst (es geht auch sowas 12.0526, oder 1205.26, oder 12.05.26, 12-12-12, 12/12/12), dann kannst du mal folgende Datei probieren: ;-)
https://www.herber.de/bbs/user/180744.xlsb

Man könnte/müsste hier noch den Eingabebereich einschränken bzw. genauer prüfen, aber - es ist nur ein Beispiel. ;-)
Falls du viel Arbeitsmappen wechselst, könnte das OnKey noch auf Deactivate/Activate angepasst werden (wegen deinem zwei nach rechts). ;-)
Und ich weiß nicht, ob du "REGEXREPLACE" hast - kann man aber schnell austauschen. ;-)
Falls du nun aber auch noch andere Eingabeformate oder 19xx 20xx unterscheiden willst, dann muss man anpassen - es ist kein "genereller" Datum-Parser. ;-)

Servus
Case