Mehrere Datumsformate in einer Spalte in Excel

2

Ich habe eine CSV-Datei mit einer Datumsspalte mit Datumsangaben in verschiedenen Formen wie folgt:

dd-mm-yyyy

yyyy-mm-dd

yyyy-mm

yyyy

Diese unregelmäßigen Daten befinden sich in einer einzelnen Spalte.

Wie konvertiere ich sie alle in dd-mm-yyyyund extrahiere das Jahr aus ihnen mit der Excel-Formel? Die gewünschte Ausgabe lautet wie folgt:

Input       Output
25-03-1954  25-03-1954
22-09-1987  22-09-1987
1990-01-25  25-01-1990
1968-11-15  15-11-1968
1919-01     01-01-1919
1873-02     01-02-1873
1945        01-01-1945
1933        01-01-1933
Pflanzen
quelle
Was meinst du mit bedingt konvertieren? Zeigen Sie uns den Zustand!
Rajesh S
@ RajeshS Mit "bedingt" meine ich die Konvertierung dd-mm-yyyyentsprechend der Art der Eingabe in der Zelle.
Crops
wenn Sie einfach nur Eingabedaten konvertieren möchten, wie die Ausgabe zeigt, kann die Kuppel von TEXT excel Formula verwendet werden.
Rajesh S
Und was meinst du damit ,, "und extrahiere das Jahr aus ihnen mit der Excel-Formel?" da deine Ausgabe alle 3 Datum, Monat & Jahr hat !!
Rajesh S
TEXTkann einzeln verwendet werden, wenn ich das Format in der Eingabe kenne. Ich habe Tausende von Eingabezellen (in mehreren Formaten), die ich in eine Ausgabe konvertieren möchte. Allerdings kann ich die Ausgabe nicht bekommen. Sobald ich die Ausgabe erhalte, kann ich das Jahr mitYEAR()
Crops

Antworten:

1

Wenn Sie nur das Jahr wirklich brauchen, verwenden Sie die Formel @robinCTS.

WENN das Ergebnis "echte Excel - Daten" sein soll und

  • Wenn Ihre Daten TEXT und keine echten Daten sind,
  • und wenn Ihre regionalen Datumseinstellungen sind DMY,
  • und die Spalte ist formatiert als dd-mm-yyyy

dann könnten Sie diese Formel verwenden:

=IFERROR(IFERROR(IFERROR(DATEVALUE(A2),DATEVALUE(A2&"-01")),DATEVALUE(A2&"-01-01")),"illegal date format")

Beachten Sie, dass Datumsangaben vor 1900 in Excel keine reellen Datumsangaben sind, sondern als TEXT-Zeichenfolgen dargestellt werden können. Ich überlasse es Ihnen, die Formel zu optimieren.

Wenn Ihre Ausgabe für Länder mit anderen Datumsformaten international bekannt sein muss, ist eine VBA-Lösung möglicherweise die beste. Ist dies nicht möglich, können Hilfsspalten verwendet werden, um die Daten aufzuteilen und anschließend entsprechend neu zusammenzusetzen, oder es kann eine sehr komplexe Formel verwendet werden, um dies zu tun.

Beachten Sie, dass diese UDF abhängig vom zweiten optionalen Argument entweder das tatsächliche Datum oder nur das Jahr ausgibt.

Option Explicit
Function ConvertToDate(S As String, Optional Yr As Boolean = False) As Variant
    Dim V
    Dim dtTemp As Date

V = Split(S, "-")
Select Case UBound(V)
    Case 0
        dtTemp = DateSerial(V(0), 1, 1)
    Case 1
        dtTemp = DateSerial(V(0), V(1), 1)
    Case 2
        If Len(V(0)) = 4 Then
            dtTemp = CDate(S)
        Else
            dtTemp = DateSerial(V(2), V(1), V(0))
        End If
End Select

If Yr = True Then
    ConvertToDate = Year(dtTemp)
Else
    If Year(dtTemp) < 1900 Then
        ConvertToDate = Format(dtTemp, "dd-mm-yyyy")
    Else
        ConvertToDate = dtTemp
    End If
End If

End Function

Beiden Methoden Blick auf dem ersten Segment, und nehmen an, es ist ein Jahr , wenn LEN > 4, und dann schauen, wie viele Segmente zu entscheiden , ob die notwendigen anhänge -01‚s

Die VBA-Lösung gibt Daten vor 1900 als Textzeichenfolge aus.

Ron Rosenfeld
quelle
OP hat noch nie nach VBA verlangt, OP braucht Excel Formula !!
Rajesh S
1
@ RajeshS Und das war der erste Teil der Antwort. Ich habe aber auch andere Optionen besprochen. Dies ist nicht nur ein kostenloser "Code für mich" -Dienst, sondern bietet Informationen sowohl für das OP als auch für andere Benutzer, die anschließend in der Datenbank nach Antworten suchen können. Daher können sowohl Erklärungen der Algorithmen als auch alternative Methoden zur Lösung eines Problems hilfreich sein.
Ron Rosenfeld
1

Da Ihre Eingabedaten Daten vor 1900 enthalten, wird es etwas kniffliger. Am einfachsten geht man damit um, wenn man ausschließlich mit den Textdarstellungen der Daten arbeitet.

Wenn Sie nicht das vollständige Datum, sondern nur das Jahr benötigen, geben Sie diese Grundformel in eine beliebige Zelle in der Zeile ein 2:2:

=IFERROR(VALUE(LEFT(A2,4)),VALUE(RIGHT(A2,4)))

Für das vollständige Datum ist die Formel etwas komplizierter:

=IF(MID(A2,3,1)="-",A2,CHOOSE((LEN(A2)-4)/3+1,"01-01","01"&MID(A2,5,3),RIGHT(A2,2)&MID(A2,5,3))&"-"&LEFT(A2,4))

Erläuterung:

Die hübsche Version der vollständigen Datumsformel lautet wie folgt:

=
IF(
  MID(A2,3,1)="-",
  A2,
  CHOOSE(
    (LEN(A2)-4)/3+1,
    "01-01",
    "01"&MID(A2,5,3),
    RIGHT(A2,2)&MID(A2,5,3)
  )
  &"-"&LEFT(A2,4)
)

Es ist ziemlich einfach. Das einzige, was etwas schwierig ist, ist das erste Argument der CHOOSE()Funktion (LEN(A2)-4)/3+1. Dies ordnet die Länge der eingegebenen Datumszeichenfolgen 1-basierten Indizes zu, dh → → .[yyyy, yyyy-mm, yyyy-mm-dd, dd-mm-yyyy][4, 7, 10, 10][1, 2, 3, 3]

Anmerkungen:

  • Die vorgegebene Formel funktioniert tatsächlich, wenn sie eingegeben wird.

Vorsichtsmaßnahmen:

  • Die Formeln setzen voraus, dass alle Eingabedaten als Text gespeichert sind. (Die Formeln können leicht geändert werden, um als Seriennummern gespeicherte Daten zu berücksichtigen.)
  • Wenn die Eingabedaten führende / nachfolgende Leerzeichen enthalten, funktionieren die obigen Formeln möglicherweise nicht richtig. Sie funktionieren definitiv nicht mit Leerzeichen (oder anderen Zeichen) an anderer Stelle in den Datumszeichenfolgen. Das Ersetzen aller A2s in den Formeln durch TRIM(A2)oder noch besser durch SUBSTITUTE(A2," ","")löst dieses Problem.
robinCTS
quelle