Как разобрать нестандартный формат даты в Excel?

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

DATEVALUE не может распознать этот формат; я просто получаю #VALUE! когда я попробовать. Он также не занимает пользовательский формат даты (в отличие от большинства языков программирования).

как я могу конвертировать произвольные форматы даты в значения даты Excel?

30
задан Craig Walker
05.03.2023 10:36 Количество просмотров материала 2798
Распечатать страницу

3 ответа

вам нужно выполнить разбор строк, а затем передать соответствующее форматированное значение в DATEVALUE – что-то вроде этого:

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

(edit: обновлена формула - проверено и работает она у меня на одном примере - возможно потребуется доработка в зависимости от вашего ввода)

19
отвечен Aerik 2023-03-06 18:24

обратите внимание, что имена месяцев зависят от региональных параметров Windows. Таким образом, если региональные параметры Windows установлены на украинский язык, то DATEVALUE вернет #VALUE! для "07-ноя-2012", но согласится "07-Лис-2012".

4
отвечен Olexa 2023-03-06 20:41

первенствует функция 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
0
отвечен CodeKid 2023-03-06 22:58

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх