Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
Hallo Christian,
dein Problem kann extrem komplex werden, wenn man die Voraussetzung annimmt, wie Du sie beschreibst.
Jedoch kann man die Lösung extrem einfach haben, wenn der erfassende Mensch bereit wäre, eine Einschränkung im Kauf zu nehmen: das Datum müsste in der Form
JJJJ-MM-TT erfasst werden!
Also zuerst Jahr, Monat als Zahl und Tag als Zahl, jeweils mit "-" getrennt. Es ist übrigens die ISO-Form eines Datums (daher nicht aus persönlicher Kreativität entstanden).
Man dürfte dabei den Tag oder Monat und Tag (und jeweilige "-") weglassen: 1974, 1974-11, usw.
Eine automatische Korrektur erfolgt mit folgendem Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim D
Application.EnableEvents = False
On Error Resume Next
D = Split(Target.Value & "-99-99", "-")
If D(1) = 99 Then D(1) = 12
If D(2) = 99 Then D(2) = Day(DateSerial(D(0), D(1) + 1, 0))
Target.Value = Format(DateSerial(D(0), D(1), D(2)), "DD.MM.YYYY")
Application.EnableEvents = True
End Sub
Auf dem Register des Arbeitsblattes rechtklicken, "Code anzeigen" auswählen und Code in der gerade geöffneten Modul reinkopieren.
Achtung: bei Eingabe ausserhalb der Rahmen, also Monat > 12 oder Tag > Tag-im-Monat, wird ein Datum trotzdem berechnet! Monat 13 = Januar vom nächsten Jahr, usw.
VG
Yal