извлечение даты из строки - PullRequest
       10

извлечение даты из строки

0 голосов
/ 02 октября 2019

У меня есть следующая строка:

CO_CAS_REA_NO_VIPPLUS_20190402_BONUS

Я хотел бы извлечь часть даты (20190402) и преобразовать ее в формат DD / MM / YY, если это возможно.

Я пыталсянекоторые формулы «Поиск» и «извлечение», но безрезультатно.

У кого-нибудь есть идеи, как это сделать в Excel или VBA?

Другие варианты строки данных будут выглядеть так:

COCASREAHVPLUSVIPUK20190827CRMFSDEP
COCASREALVWINFIDEGL20190809CRMPTS
COSBINFLVFIDE20190830CRMBET
CO_CAS_RET_HVMV_UK_20190830_RB
COSB_REA_181INF_HVMV_FIDE_20190809_CRM_RB
COSBREAHVMVGL20190831CRMFBFSQUAL
COSBINFLVNO20190816CRMFB

Ответы [ 5 ]

1 голос
/ 03 октября 2019

Предположим, что в каждой строке имеется только одна 8-значная цифровая строка , представляющая дату в виде YYYYMMDD, которую вы хотите извлечь, вы можете использовать одну из следующих трех формул для возвратадата:

Example

Метод 1:

=DATE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4),MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2),RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))

Метод 2:

=DATEVALUE(LEFT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),4)&"/"&MID(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),5,2)&"/"&RIGHT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),2))

Метод 3:

=DATEVALUE(TEXT(MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)),"0000-00-00"))

Обратите внимание, что все методы используют формула массива , поэтому вы ДОЛЖНЫ нажмите Ctrl + Shift + Введите после завершения формулы в строке формул, иначе они будут работать неправильно. Затем вы можете просто перетащить формулу вниз, чтобы применить поперек.

Логика заключается в том, чтобы использовать эту формулу массива =MAX(IFERROR(--MID(A1,ROW($A$1:INDEX($A:$A,LEN(A1))),8),0)), чтобы сначала извлечь числовую строку. Методы 1 и 2 следуют той же логике, которая заключается в извлечении компонента year YYYY, month MM и day DD из числовой строки, а затем используйте функцию DATE или DATEVALUE , чтобывернуть дату. Метод 3 использует прием форматирования для быстрого преобразования числового значения в текстовую дату, а затем с помощью функции DATEVALUE преобразует текстовую дату в «реальную» дату.

ПустьЯ знаю, если у вас есть какие-либо вопросы. Ура :) 1052 *

0 голосов
/ 03 октября 2019

Предположим, ваши данные помещены в столбец A

В B2 введите формулу:

=0+TEXT(AGGREGATE(14,6,--MID(A1,ROW($1:$250),8),1),"0000-00-00")

Затем B2 >> Формат ячейки, на вкладке Number выберите: «Date»>> выберите дд / мм / гг

Все скопировано

0 голосов
/ 02 октября 2019

Это может показаться более гибким, если текст слева изменится:

enter image description here

Для экономии при вводе здесь используется формула в ячейке C1:

=MID(A1,FIND("LUS_",A1,1)+4,FIND("_BON",A1,1)-FIND("LUS_",A1,1)-4)

Однако предполагается, что 4 символа по обе стороны от даты всегда одинаковы.

0 голосов
/ 02 октября 2019

Если предположить, что строки находятся в столбце А, и вы ищете только 2019 год, вы можете использовать это

=DATE(LEFT(MID(A1,SEARCH(2019,A1),8),4), MID(MID(A1,SEARCH(2019,A1),8),5,2), RIGHT(MID(A1,SEARCH(2019,A1),8),2))
0 голосов
/ 02 октября 2019

с формулой Excel, используйте функцию MID()

=MID("CO_CAS_REA_NO_VIPPLUS_20190402_BONUS",23, 8)

с VBA, вы можете разделить ее с помощью "_"

dte_str = Split("CO_CAS_REA_NO_VIPPLUS_20190402_BONUS", "_")(5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...