Як розібрати нестандартний формат дати в Excel?


24

У мене є стовпець значень рядка, що нагадує дату, у такому форматі yyyy-mm-dd, як 2011-Sep-13. Мені потрібно конвертувати їх у серійні номери дат Excel, щоб я міг їх використовувати у формулах.

DATEVALUE не може розпізнати цей формат; Я просто отримую, #VALUE!коли намагаюся. Він також не приймає спеціальний формат дати (на відміну від більшості мов програмування).

Як я можу конвертувати довільні формати дат у значення дати Excel?

Відповіді:


21

Вам потрібно буде проаналізувати рядок, а потім передати відповідне форматоване значення у DATEVALUEщось подібне:

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

(редагувати: оновлена ​​формула - перевірена, і вона працює для мене на одному прикладі - можливо, потрібно буде уточнити залежно від ваших даних)


1
+1: Я мав це в буфері обміну, коли ви опублікували: = DATEVALUE (ВПРАВО (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll

Хе, я ніколи не думав просто переставляти шматочки. Спасибі!
Крейг Уокер

2
8 років і декілька версій Excel пізніше, це все-таки найбільш відповідна відповідь! Я хочу, щоб Excel міг забезпечити функціюPARSEDATE([string_value], [date format])
Ману Манджунат

5

Зверніть увагу, що назви місяців є специфічними для регіональних опцій Windows. Отже, якщо ваші регіональні параметри Windows встановлені на українську, DATEVALUE поверне #VALUE! за "07-листопада-2012", але прийняв би "07-Лис-2012".


1
Дуже дуже важлива примітка !! Шкода, що excel не визнає за замовчуванням обидва регіональні налаштування + англійські імена місяця / дня
athanassis

1

Функція Excels DateValue залежить від регіону. Якщо ви проаналізуєте рядок типу "04-11-2008" в Європі, який би був проаналізований 4 листопада, а в США - 11 квітня.

Щоб обійти це, ви можете скористатися функцією DateSerial і зробити розбір самостійно. Це також можна легко адаптувати до вашого власного нестандартного формату дати.

' 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.