Làm cách nào để phân tích một định dạng ngày không chuẩn trong Excel?


24

Tôi có một cột các giá trị chuỗi giống như ngày ở định dạng yyyy-mm-dd, chẳng hạn như 2011-Sep-13. Tôi cần chuyển đổi chúng thành các số sê-ri ngày Excel để tôi có thể sử dụng chúng trong các công thức.

DATEVALUE không thể nhận ra định dạng này; Tôi chỉ nhận được #VALUE!khi tôi cố gắng. Nó cũng không có định dạng ngày tùy chỉnh (không giống như hầu hết các ngôn ngữ lập trình).

Làm cách nào tôi có thể chuyển đổi định dạng ngày tùy ý thành giá trị ngày Excel?

Câu trả lời:


21

Bạn sẽ cần thực hiện phân tích chuỗi, sau đó chuyển một giá trị được định dạng thích hợp vào DATEVALUE- đại loại như thế này:

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

(chỉnh sửa: công thức cập nhật - đã thử nghiệm và nó hoạt động với tôi trên một ví dụ - có thể cần tinh chỉnh tùy thuộc vào đầu vào của bạn)


1
+1: Tôi đã có cái này trên bảng tạm sẵn sàng khi bạn đăng: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Xuất sắc

Heh, tôi không bao giờ nghĩ đến việc sắp xếp lại các bit. Cảm ơn!
Craig Walker

2
8 năm và nhiều phiên bản Excel sau này, đây vẫn là câu trả lời phù hợp nhất! Tôi ước Excel có thể cung cấp một chức năngPARSEDATE([string_value], [date format])
Manu Manjunath

5

Lưu ý rằng tên tháng là tùy chọn khu vực Windows cụ thể. Vì vậy, nếu Tùy chọn khu vực Windows của bạn được đặt thành tiếng Ukraina, thì DATEVALUE sẽ trả về #VALUE! cho "07-tháng 11 năm 2012", nhưng sẽ chấp nhận "07-Лис-2012".


1
Lưu ý rất rất quan trọng !! Thật đáng tiếc khi excel không nhận ra cả cài đặt khu vực + tên tháng / ngày tiếng Anh theo mặc định
athanrame

1

Hàm Excels DateValue phụ thuộc vào vùng. Nếu bạn phân tích một chuỗi như "04-11-2008" ở Châu Âu sẽ được phân tích thành ngày 4 tháng 11 và ở Hoa Kỳ là ngày 11 tháng 4.

Để giải quyết vấn đề này, bạn có thể sử dụng hàm DateSerial và tự mình phân tích cú pháp. Điều này cũng có thể dễ dàng thích nghi với định dạng ngày không chuẩn của riêng bạn.

' 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.