Wie analysiere ich ein nicht standardmäßiges Datumsformat in Excel?

24

Ich habe eine Spalte mit datumsähnlichen Zeichenfolgenwerten im Format yyyy-mm-ddwie z 2011-Sep-13. Ich muss diese in Excel-Datumsseriennummern konvertieren, damit ich sie in Formeln verwenden kann.

DATEVALUE kann dieses Format nicht erkennen. Ich bekomme nur, #VALUE!wenn ich es versuche. Es wird auch kein benutzerdefiniertes Datumsformat verwendet (im Gegensatz zu den meisten Programmiersprachen).

Wie kann ich beliebige Datumsformate in Excel-Datumswerte konvertieren?

Craig Walker
quelle

Antworten:

21

Sie müssen ein String-Parsing durchführen und dann einen entsprechenden formatierten Wert übergeben DATEVALUE- etwa so:

=DATEVALUE(RIGHT(A1,2)&"-"&MID(A1,6,3)&"-"&LEFT(A1,4))

(edit: aktualisierte Formel - getestet und es funktioniert für mich an einem Beispiel - muss möglicherweise je nach Ihrer Eingabe verfeinert werden)

Aerik
quelle
1
+1: Ich hatte dies in der Zwischenablage bereit, als Sie geschrieben haben: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Hervorragend
Heh, ich hätte nie gedacht, nur die Bits neu zu ordnen. Vielen Dank!
Craig Walker
2
8 Jahre und mehrere Excel-Versionen später ist dies immer noch die relevanteste Antwort! Ich wünschte, Excel kann eine Funktion bereitstellenPARSEDATE([string_value], [date format])
Manu Manjunath
5

Beachten Sie, dass die Monatsnamen spezifisch für Windows Regional Options sind. Wenn Ihre Windows-Ländereinstellungen auf Ukrainisch eingestellt sind, würde DATEVALUE #VALUE zurückgeben! für "07-Nov-2012", würde aber "07-Лис-2012" akzeptieren.

Olexa
quelle
1
Sehr, sehr wichtiger Hinweis !! Es ist schade, dass Excel nicht beide regionalen Einstellungen + englische Monats- / Tagesnamen standardmäßig
erkennt
1

Die Excels DateValue-Funktion ist regionabhängig. Wenn Sie einen String wie "04-11-2008" in Europa analysieren, wird dieser als 4. November und in den USA als 11. April analysiert.

Um dies zu umgehen, können Sie die DateSerial-Funktion verwenden und das Parsen selbst durchführen. Dies kann auch einfach an Ihr eigenes, nicht standardmäßiges Datumsformat angepasst werden.

' Region independent date parsing
' Expects a datetimestr in the format  "04-11-2008 21:39:39"
' The function VBA.DateTime.DateValue() mixes up the date and month in different regions
Function parseDateTime(dateTimeStr As String) As Date

    Dim parts As Variant
    parts = VBA.Strings.Split(dateTimeStr, " ")

    Dim datePart As String, timePart As String
    datePart = parts(0)
    timePart = parts(1)

    Dim dateParts As Variant, day As Integer, month As Integer, year As Integer
    dateParts = VBA.Strings.Split(datePart, "-")
    day = dateParts(0)
    month = dateParts(1)
    year = dateParts(2)

    Dim parsed_date As Date, parsed_time As Date
    parsed_date = VBA.DateTime.DateSerial(year, month, day)
    parsed_time = VBA.DateTime.TimeValue(timePart)

    parseDateTime = parsed_date + parsed_time
End Function
CodeKid
quelle