Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln

Forumthread: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln

eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 11:36:05
Christian
Hallo, ich bitte euch um Hilfe.
Ist es irgendwie möglich mit VBA folgendes zu erreichen (automatisch bei Eingabe in Spalte E)

Eingabe: 1974 Ausgabe 31.12.1974 (also Jahresende)
Eingabe Januar 1974 Ausgabe 31.01.1974 (also Monatsende)
Eingabe eines kompletten Datums, Ausgabe dieses Datums in TT.MM.JJJJ, also keine Umwandlung ins Monatsende, wenn ich den Monatsersten mit eingegeben habe

Das Ganze soll natürlich auch für die anderen 11 Monate und alle anderen Jahrgänge funktionieren.
Die Daten werden so wie ich sie als Eingabe beschrieben habe aus dem Internet kopiert und in Excel eingefügt.

Vielen Dank
Christian

PS: Ich weiß dass meine bisherigen Versuche vermutlich daran gescheitert sind, dass Excel aus der Eingabe Januar 1974 intern den 1.1.74 macht und danach nicht mehr unterscheiden kann, ob ich den Tag mit eingegeben hatte oder nicht. Ich hoffe ihr kennt trotzdem eine Lösung
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Im Anhang ist...
27.04.2026 12:16:09
Christian
Hallo Case,

erstmal vielen Dank für deine Mühe.
Was heißt hier Ansatz, das war eine funktionierende Lösung, die ich nur noch habe in meinen Code einbauen müssen. Dieser sieht jetzt so aus, funktioniert:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error GoTo Cleanup

Dim rngE As Range, rngH As Range, rngOP As Range
Dim zelle As Range

Set rngE = Intersect(Target, Me.Columns("E"))
Set rngH = Intersect(Target, Me.Columns("H"))
Set rngOP = Intersect(Target, Me.Columns("O:P"))

If rngE Is Nothing And rngH Is Nothing And rngOP Is Nothing Then Exit Sub

Application.EnableEvents = False
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

' =========================
' SPALTE E (Forum-Logik)
' =========================
If Not rngE Is Nothing Then
For Each zelle In rngE
Call FormatZelle_E(zelle)
Next zelle
End If

' =========================
' SPALTE H (nur Format + Ranking)
' =========================
If Not rngH Is Nothing Then
For Each zelle In rngH
Call FormatZelle(zelle)
Next zelle

BerechneCodesRanking Me
End If

' =========================
' AUTO FIT
' =========================
If Not rngOP Is Nothing Then
Me.Columns("A:Q").AutoFit
End If

Cleanup:
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

If Err.Number > 0 Then
MsgBox "Fehler " & Err.Number & ": " & Err.Description, vbExclamation, "Worksheet_Change"
End If
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)

Dim wsQ As Worksheet, wsZ As Worksheet
Dim freieZeile As Long, zielZeile As Long
Dim Antwort As VbMsgBoxResult
Dim wertB As String
Dim i As Integer

Set wsQ = ThisWorkbook.Sheets("Codes")
Set wsZ = ThisWorkbook.Sheets("NV")

freieZeile = wsQ.Cells(wsQ.Rows.Count, "D").End(xlUp).Row + 1

If Target.Row > freieZeile Then Exit Sub

Cancel = True

wertB = UCase(Trim(wsQ.Cells(Target.Row, "B").Value))

If wertB = "UNKNOWN" Or wertB = "UNKNOWNS" Then
wsQ.Rows(Target.Row).Delete
Exit Sub
End If

Antwort = MsgBox("Soll die Zeile verschoben werden?" & vbCrLf & _
"Ja = Verschieben nach NV" & vbCrLf & _
"Nein = Nur löschen", _
vbYesNoCancel + vbQuestion, "Aktion auswählen")

If Antwort = vbCancel Then Exit Sub

If Antwort = vbYes Then
zielZeile = wsZ.Cells(wsZ.Rows.Count, "A").End(xlUp).Row + 1

For i = 1 To 3
With wsZ.Cells(zielZeile, i)
.Value = wsQ.Cells(Target.Row, i).Value
.Font.Color = wsQ.Cells(Target.Row, i).Font.Color
.Font.Italic = True
.HorizontalAlignment = xlCenter
End With
Next i

With wsZ.Cells(zielZeile, 4)
.Value = wsQ.Cells(Target.Row, "Q").Value
.Font.Color = wsQ.Cells(Target.Row, "Q").Font.Color
.Font.Italic = True
.HorizontalAlignment = xlCenter
End With

wsZ.Columns("A:D").AutoFit
End If

wsQ.Rows(Target.Row).Delete

End Sub

Private Sub FormatZelle_E(ByVal zelle As Range)

If Len(zelle.Value) = 0 Then
Me.Cells(zelle.Row, "K").ClearContents
Exit Sub
End If

If zelle.Hyperlinks.Count > 0 Then zelle.Hyperlinks.Delete

Dim strTMP As String
Dim datDate As Date

strTMP = Trim(zelle.Text)

' -------------------------
' 1) Jahr ? 31.12.JJJJ
' -------------------------
If strTMP Like "####" And IsNumeric(strTMP) Then
zelle.Value = DateSerial(CLng(strTMP), 12 + 1, 0)

' -------------------------
' 2) Monat + Jahr ? Monatsende
' -------------------------
ElseIf IsDate("1 " & strTMP) Then
datDate = CDate("1 " & strTMP)
zelle.Value = DateSerial(Year(datDate), Month(datDate) + 1, 0)

' -------------------------
' 3) vollständiges Datum ? ??? lassen
' -------------------------
ElseIf IsDate(strTMP) Then
zelle.Value = CDate(strTMP)
End If

zelle.NumberFormat = "dd.mm.yyyy"

' Styling
With zelle
.Font.Size = 11
.Font.Name = "Calibri"
.Font.Italic = True
.Font.Bold = False
.HorizontalAlignment = xlCenter
.Font.Color = Me.Cells(.Row, "A").Font.Color
End With

End Sub

Private Sub FormatZelle(ByVal zelle As Range)

If Len(zelle.Value) = 0 Then Exit Sub

If zelle.Hyperlinks.Count > 0 Then zelle.Hyperlinks.Delete

If IsDate(zelle.Value) Then
zelle.Value = CDate(zelle.Value)
zelle.NumberFormat = "dd.mm.yyyy"
End If

With zelle
.Font.Size = 11
.Font.Name = "Calibri"
.Font.Italic = True
.Font.Bold = False
.HorizontalAlignment = xlCenter
.Font.Color = Me.Cells(.Row, "A").Font.Color
End With

End Sub


Gruß
Christian
Anzeige
Das mit dem...
27.04.2026 12:58:16
Case
Moin Christian, :-)

... Ansatz habe ich geschrieben, da dein Hinweis die Daten aus dem Internet zu laden, für mich die Möglichkeit beinhaltet, dass auch andere Formate vorkommen können (Jan 1974, January 1974, 1974-01, 1974/01...). ;-)

Müsste dann noch abgefangen werden. ;-)

Servus
Case
Anzeige
AW: Das mit dem...
27.04.2026 13:36:27
Christian
ach so, das hätte ich auch deutlicher schreiben können, es gibt zwar verschiedene aber Januar 1974 und 1974 waren die einzigen, die durch Excel bzw. das bereits vorhandene nicht korrekt umgewandelt wurden (bzw andre Monate / Jahre)

Vielen Dank
Christian
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 12:13:05
Yal
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
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 13:40:36
snb
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

Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 14:03:34
Christian
Hallo SNB,

ich glaube wenn ich alles was ich mit KI programmiert habe einen Programmierer beauftragt hätte, hätte der gefühlt einen Monat Vollzeit zu tun gehabt.
Bin da doch sehr dankbar.
Nur in manchen Fällen wie diesen, konnte mir die KI nicht weiterhelfen.
Aber nun zu deinem Vorschlag. So ganz funktioniert er leider nicht. Wenn ich "1. Januar 1974" oder auch alle anderen Daten mit vorhandenem Tag aus dem Internet nach Spalte E kopiere, macht er daraus das Monatsende.
Die Umwandlung wenn Tag oder auch Monat fehlt, funktioniert.
Bin jetzt erstmal unterwegs, kann mich erst spät abends wieder melden.

Gruß
Christian
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 15:44:44
daniel
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
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 15:58:20
Christian
Hallo Daniel, schreibe im Moment vom Handy aus, bin erst heute abend wieder zuhause um es testen zu können. Aber ich kann soviel schonmam sagen, die Daten haben alle das Format 1. Januar 1974 also Monat ausgeschrieben, Tag ohne führende 0 und Jahr 4stellig. Diese Daten sollen wie sie sind in tt.mm.jjjj umgewandelt werden. Bei manchen fehlt der Tag oder teilweise zusätzlich auch der Monat. In diesem Fall soll dann der monats- bzw. Im zweiten Fall das Jahresende ausgegeben werden. Auch im Format tt.mm.jjjj

Gruß
Christian

Vielen Dank schonmal
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 12:20:57
Christian
Hallo Yal,

erstmal vielen Dank.
Das Problem ist jetzt nur, wie bringe ich es ins Format JJJJ-MM-TT. Wie ich ja bereits sagte, ich mache da Copy + Paste von einer Internetseite (IMDB).
Das einzige, was mir da einfällt, ist abtippen im entsprechenden Format. Was zu dem Problem führt, weshalb ich das Ganze überhaupt angefragt habe, um Tippfehler bei den Daten zu vermeiden, die ich nicht 1:1 kopieren und einfügen kann.
Wobei ich dann ja auch direkt anstatt es im Format JJJJ-MM-TT einzugeben auch direkt das gewünschte Ergebnis eintippen kann.
Oder wie hast du dir das vorgestellt? Anders als so habe ich deinen Beitrag leider nicht verstanden.

Gruß
Christian
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 20:51:41
Yal
Hallo Christian,

für mich bedeutet "Dateneingabe", dass die Daten eingegeben werden, also eingetippt.
Beim Copy-Paste werden die Daten "reinkopiert".
Wie üblich, die richtige Antwort bekommt man mit der richtigen Frage. Der Prozess, sich die richtige Frage zu überlegen, führt auch oft zu selbst gefundenen Lösungen. Also es lohnt sich.

VG
Yal
Anzeige
AW: eingegebenes Datum mit VBA in TT.MM.JJJJ umwandeln
27.04.2026 21:07:33
Christian
Hallo yal, im Eingangspost steht, dass
die daten aus dem Internet kopiert und in Excel eingefügt werden.

Genau deshalb habe ich es ja dazugeachrieben.

Außerdem was macht es für einen Unterschied, ob ich es eintippe oder mit strg+v einfüge? Wenn es in diesem Fall einen Unterschied macht, kenne ich ihn nicht.

Gruß Christian
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18