Извлечение даты из ячейки с указанием даты и времени - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть ячейка G4 с датой и временем в формате (текстовая строка):

1/29/2020 1:34:24 PM

Мне нужно преобразовать ее в ячейку, отформатированную в DATE. Как это сделать?

Я пытался получить числа и преобразовать их в ДАТУ по следующей формуле:

=DATE((MID(G4;SEARCH("/";G4)+4;SEARCH("/";G4;SEARCH("/";G4)+1)-SEARCH("/";G4)+2));(MID(G4;SEARCH("/";G4)+1;SEARCH("/";G4;SEARCH("/";G4)+1)-SEARCH("/";G4)-1));(LEFT(G4;FIND("/";G4;1)-1)))

Итак:

  1. I Извлекаю год:

    =MID(G4;SEARCH("/";G4)+4;SEARCH("/";G4;SEARCH("/";G4)+1)-SEARCH("/";G4)+2)

  2. Месяц

    =MID(G4;SEARCH("/";G4)+1;SEARCH("/";G4;SEARCH("/";G4)+1)-SEARCH("/";G4)-1)

  3. День

    =LEFT(G4;FIND("/";G4;1)-1)

В результате получаю:

1.5.2022

Мне нужно, как есть сейчас, но вывод должен быть 29.1.2020 в этом случае. Позже я хочу получить разницу в два дня таким образом отформатированные даты. Можно ли сделать это с формулой без выполнения каких-либо других операций форматирования ячейки?


РЕДАКТИРОВАТЬ:

Я получил это работает, единственная проблема:

Как извлечь число (год) после третьего "/ «? Моя текущая формула неверна:

=MID(G4;SEARCH("/";G4)+4;SEARCH("/";G4;SEARCH("/";G4)+1)-SEARCH("/";G4)+2)

В этом случае она не работает правильно:

2/5/2020 12:21:05 PM

РЕДАКТИРОВАТЬ:

Я сделал это так (мне также пришлось минус G2 - F2, чтобы получить разницу в днях):

=IFERROR(DAYS(MID(G2;SEARCH("/";G2)+1;SEARCH("/";G2;SEARCH("/";G2)+1)-SEARCH("/";G2)-1)&"."&LEFT(G2;FIND("/";G2;1)-1)&"."&MID(G2;FIND("/";G2;FIND("/";G2)+1)+1;4);MID(F2;SEARCH("/";F2)+1;SEARCH("/";F2;SEARCH("/";F2)+1)-SEARCH("/";F2)-1)&"."&LEFT(F2;FIND("/";F2;1)-1)&"."&MID(F2;FIND("/";F2;FIND("/";F2)+1)+1;4));"")

Вам, вероятно, нужно заменить порядок day.month.year и "." на "/" если вы используете другую настройку даты (регион). У меня есть одна настройка, так что, кажется, это работает.

Ответы [ 3 ]

1 голос
/ 05 февраля 2020

Если у вас TEXTJOIN,

=TEXTJOIN("/",TRUE,INDEX(FILTERXML("<a>,<b>"&SUBSTITUTE(SUBSTITUTE(TEXT(A1,"dd/mm/yyyy hh:mm:ss"),"/","</b><b>")," ","</b>",1)&"</a>","//b"),N(IF({1},{2,1,3}))))

В зависимости от вашей версии может потребоваться подтверждение с помощью Ctrl-Shift-Enter вместо Enter при выходе из режима редактирования.

enter image description here

причина, по которой вторая не сработала, заключается в том, что Excel фактически изменил ее на дату, а дата является двойной, а не текстовой. Так что в данных нет /. поэтому нам нужно принудительно вернуться к неверной строке.

1 голос
/ 05 февраля 2020

Те, для кого функция TEXTJOIN недоступна, могут использовать это:

=DATE(FILTERXML("<DATA><A>" & SUBSTITUTE(SUBSTITUTE(A1;"/";"</A><A>");" ";"</A><A>") & "</A></DATA>";"/DATA/A[3]");FILTERXML("<DATA><A>" & SUBSTITUTE(SUBSTITUTE(A1;"/";"</A><A>");" ";"</A><A>") & "</A></DATA>";"/DATA/A[1]");FILTERXML("<DATA><A>" & SUBSTITUTE(SUBSTITUTE(A1;"/";"</A><A>");" ";"</A><A>") & "</A></DATA>";"/DATA/A[2]"))

enter image description here

1 голос
/ 05 февраля 2020

ДАТЫ FYI в Excel хранятся в виде целых чисел. Они представляют количество дней с 1900/01/01 года с этой датой, равной 1. ВРЕМЯ хранится в виде десятичной дроби, представляющей дроби дня или 24 часа. 0,5 представляет полдень. 24:00 не является официально поддерживаемым временем в Excel, но будет работать с некоторыми функциями.

Формула DATE ищет три аргумента, представляющих YEAR, MONTH, DAY в этом порядке.

DATE(Year, Month, Day)

Вам нужно извлечь текст из строки, представляющей эти значения. Я считаю, что проще всего вытащить каждый из них по отдельности в свою собственную ячейку, чтобы убедиться, что часть формулы работает сначала, а затем скопировать и вставить эту часть в формулу DATE, чтобы все вычисления в конце можно было выполнить в одной ячейке.

ГОД

Чтобы получить год, используйте следующую формулу:

MID(G4,FIND("/",G4,FIND("/",G4)+1)+1,4)

МЕСЯЦ

Чтобы получить месяц, используйте следующую формулу:

LEFT(G4,FIND("/",G4)-1)

ДЕНЬ

Чтобы получить день, используйте следующую формулу:

MID(G4,FIND("/",G4)+1,FIND("/",G4,FIND("/",G4)+1)-FIND("/",G4)

КОМБИНИРОВАННАЯ ФОРМУЛА

Поместите вышеуказанные формулы в формулу даты следующим образом:

=DATE(MID(G4,FIND("/",G4,FIND("/",G4)+1)+1,4),LEFT(G4,FIND("/",G4)-1),MID(G4,FIND("/",G4)+1,FIND("/",G4,FIND("/",G4)+1)-FIND("/",G4)-1))

Обратите внимание, что единственная ссылка на ячейку в формуле - G4. Результаты формулы не в формате даты Excel. Измените форматирование вашей ячейки в соответствии с вашими потребностями. В вашем случае я бы применил пользовательский формат ячейки dmyyyy

POC

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