Преобразование текста даты и времени в формат даты и времени в Excel - PullRequest
0 голосов
/ 15 ноября 2018

Есть ли способ отформатировать следующий текст в формат даты и времени в Excel?Ничего, что я пробую, не работает.

Fri, November 16 2018 8:00 PM

Я попытался сделать следующее, но безуспешно.

=TEXT("Fri, November 16 2018 8:00 PM","ddd, mmm d yyyy h:mm AM/PM")

Ответы [ 4 ]

0 голосов
/ 15 ноября 2018

Чудовище, но не должно зависеть от локали (США или Великобритания):

=DATE(LEFT(RIGHT(A1,13),5),MONTH(DATEVALUE(LEFT(MID(A1,6,9),FIND(" ",MID(A1,6,10)))&"1")),MID(MID(A1,FIND(" ",A1)+1,99),FIND(" ",MID(A1,FIND(" ",A1)+1,99))+1,2))+LEFT(TRIM(RIGHT(A1,8)),7)
0 голосов
/ 15 ноября 2018

Если вы хотите избежать VBA, вам нужно использовать функции DATEVALUE и TIMEVALUE.К сожалению, эти функции недостаточно умны для преобразования текста, который вы описываете, но вы все равно можете разделить текст по формуле ячейки перед вводом в эти функции.Следующая формула преобразует текст Fri, November 16 2018 8:00 PM в значение даты / времени (при условии, что текст находится в ячейке A1).

=DATEVALUE(SUBSTITUTE(MID(A1, FIND(" ",A1)+1, FIND("|", SUBSTITUTE(A1," ","|",4))-FIND(" ",A1)), " ", ", ", 2)) + TIMEVALUE(RIGHT(A1, LEN(A1)-FIND("|", SUBSTITUTE(A1," ","|",4))))
0 голосов
/ 15 ноября 2018

Отличное решение для регулярных выражений выше, вы также можете сделать это по-другому:

Function ConvertToDate(str As String) As Date

    Dim arr() As String

    arr = Split(str, " ")

    ConvertToDate = CDate(arr(3) & "/" & Month("01/" & arr(1) & "/2018") & "/" & arr(2) & " " & arr(4))

End Function
0 голосов
/ 15 ноября 2018

Вы можете создать свой собственный пользовательский UDF и использовать его как функцию рабочего листа:

Public Function myDateToDate(inputRng As Range) As Date

    With CreateObject("VBScript.RegExp")
        .Pattern = "\w{3},\s(\w+\s\d+\s\d+)\s(\d+:\d+\s\w+)"
        If .test(inputRng.Value) Then
            With .Execute(inputRng.Value)(0).SubMatches
                myDateToDate = CDate(.Item(0)) + CDate(.Item(1))
            End With
        End If
    End With

End Function

Это будет использовать Reg ular Ex нажатий (RegEx) , чтобы захватить значения в вашей строке и захватить как дату, так и время. Поскольку в Excel все даты являются числами, вы можете добавить первую группу захвата (\w+\s\d+\s\d+) (которая представляет дату) со второй группой захвата (\d+:\d+\s\w+) (которая представляет время) вместе. (Смотрите, как работает шаблон регулярных выражений здесь ) .

После того, как вы это сделали, вы можете теперь использовать свой вновь созданный UDF, используя формулу рабочего листа =myDateToDate(A1) - где A1 будет заменено ячейкой / строкой, содержащей вашу дату.

enter image description here


Если вы не знакомы с VBA, читайте дальше:

Как получить доступ к VBE?
Вы можете получить доступ к VBE, нажимая Alt + F11 , находясь в рабочей книге.

Хорошо, значит, у меня открыт VBE. Теперь, как мне применить этот Sub / UDF?
На левой панели вы увидите объектные модули вашей книги. Это называется Project Explorer . Вам нужно будет создать новый модуль, который вы можете сделать с помощью right-clicking inside the Project Explorer > Insert > Module:

enter image description here

Теперь вы можете вставить Sub / UDF в этот новый модуль, и все готово!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...