Bagaimana cara mem-parsing format tanggal yang tidak standar di Excel?

24

Saya memiliki kolom nilai string seperti tanggal dalam format yyyy-mm-dd, seperti 2011-Sep-13. Saya perlu mengonversinya ke nomor seri tanggal Excel sehingga saya dapat menggunakannya dalam formula.

DATEVALUE tidak dapat mengenali format ini; Saya hanya mendapatkan #VALUE!ketika saya mencoba. Itu juga tidak mengambil format tanggal kustom (tidak seperti kebanyakan bahasa pemrograman).

Bagaimana saya bisa mengubah format tanggal sewenang-wenang menjadi nilai tanggal Excel?

Craig Walker
sumber

Jawaban:

21

Anda harus melakukan penguraian string, lalu meneruskan nilai yang diformat ke dalam DATEVALUE- sesuatu seperti ini:

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

(edit: rumus yang diperbarui - diuji dan berfungsi untuk saya pada satu contoh - mungkin perlu disempurnakan tergantung pada input Anda)

Aerik
sumber
1
+1: Saya sudah siapkan di clipboard ketika Anda memposting: = DATEVALUE (KANAN (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll
Heh, saya tidak pernah berpikir untuk menata ulang bit. Terima kasih!
Craig Walker
2
8 tahun dan beberapa versi Excel kemudian, ini masih merupakan jawaban yang paling relevan! Saya berharap Excel dapat menyediakan fungsiPARSEDATE([string_value], [date format])
Manu Manjunath
5

Perhatikan bahwa nama bulan adalah Opsi Regional Windows khusus. Jadi, jika Opsi Regional Windows Anda diatur ke Ukraina, maka DATEVALUE akan mengembalikan #VALUE! untuk "07-Nov-2012", tetapi akan menerima "07-Лис-2012".

Olexa
sumber
1
Catatan yang sangat sangat penting !! Sayang sekali bahwa excel tidak mengenali pengaturan regional + nama bulan / hari dalam bahasa Inggris secara default
athanassis
1

Fungsi DateValue yang unggul bergantung pada wilayah. Jika Anda menguraikan string seperti "04-11-2008" di Eropa yang akan diuraikan pada 4 November dan di AS pada 11 April.

Untuk menyiasatinya, Anda dapat menggunakan fungsi DateSerial dan melakukan parsing sendiri. Ini juga dapat dengan mudah disesuaikan dengan format tanggal non standar Anda sendiri.

' 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
sumber