Jak przeanalizować niestandardowy format daty w programie Excel?


24

Mam kolumnę ciągów znaków podobnych do daty w formacie yyyy-mm-dd, takich jak 2011-Sep-13. Muszę przekonwertować je na numery seryjne daty programu Excel, aby móc ich używać w formułach.

DATEVALUE nie rozpoznaje tego formatu; Po prostu rozumiem, #VALUE!kiedy próbuję. Nie przyjmuje też niestandardowego formatu daty (w przeciwieństwie do większości języków programowania).

Jak przekonwertować dowolne formaty dat na wartości dat Excela?

Odpowiedzi:


21

Musisz wykonać analizę ciągu, a następnie przekazać odpowiednią sformatowaną wartość do DATEVALUE- coś takiego:

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

(edytuj: zaktualizowana formuła - przetestowana i działa na mnie na jednym przykładzie - może wymagać dopracowania w zależności od wprowadzonych danych)


1
+1: Miałem to w schowku gotowe do pracy, gdy pisałeś: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll,

Hej, nigdy nie myślałem o przestawieniu bitów. Dzięki!
Craig Walker

2
8 lat i wiele późniejszych wersji Excela, nadal jest to najbardziej odpowiednia odpowiedź! Chciałbym, aby Excel mógł zapewnić funkcjęPARSEDATE([string_value], [date format])
Manu Manjunath,

5

Pamiętaj, że nazwy miesięcy są specyficzne dla Opcji regionalnych Windows. Tak więc, jeśli opcje regionalne systemu Windows są ustawione na ukraiński, wówczas DATEVALUE zwróci # WARTOŚĆ! w przypadku „07-lis-2012”, ale zaakceptuje „07-Лис-2012”.


1
Bardzo, bardzo ważna uwaga !! Szkoda, że ​​excel nie rozpoznaje domyślnie obu ustawień regionalnych + angielskich nazw miesięcy / dni
athanassis 18.10.16

1

Funkcja DateValue wyróżnia się w zależności od regionu. Jeśli przeanalizujesz ciąg taki jak „04-11-2008” w Europie, zostanie on przeanalizowany jako 4 listopada, aw Stanach Zjednoczonych jako 11 kwietnia.

Aby obejść ten problem, możesz skorzystać z funkcji DateSerial i samodzielnie parsować. Można to również łatwo dostosować do własnego niestandardowego formatu daty.

' 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.