2016-09-22 4 views
0

Я хотел бы, используя формулу MS Excel, извлекать текст/год из подстроки текста, содержащего уникальный шаблон поиска. У меня есть столбец (Cell A2: A19) уникальных дат, в некоторых случаях есть окружающий текст до и после текста, который я хотел бы извлечь только год, который все однозначно начинается с числа «1» (т. Е. 17 ??, 18 ??, 19 ??, и т.д.)MS Excel - извлечение уникальных текстовых шаблонов Ключевое слово из подстроки

Текущая формула enter image description here

DATE  
April 1 1799  
April 11 1867  
February 12 1806  
February 21 1798  
February 28 1844 as Delaware Township  
February 5 1798  
February 7 1892 Verona Township  
February 9 1797  
January 19 1748  
July 10 1721 as Upper Penns Neck Township  
March 15 1860  
March 17 1870 (as Raritan Township)  
March 17 1874  
March 23 1864  
March 5 1867  
April 28th 1828  
1840s  
1878 as Lehigh Township 

ТЕКУЩИЕ РЕЗУЛЬТАТЫ (из формулы используемый выше)

enter image description here

enter image description here

желательные результаты:

enter image description here

+1

Было бы неплохо, если бы вы поместили данные в текст в сообщение «Оригинал», поэтому нам не нужно повторно вводить то, что уже набрано просто чтобы проверить наши формулы. –

+0

Поместите его в свое исходное сообщение, а не комментарии, поскольку комментарии не могут быть отформатированы. –

ответ

1

Эта формула поможет вам каждому, кроме 1840s

=TRIM(MID(A2,MIN(IFERROR(SEARCH({"17?? ","18?? ","19?? "},A2 & " "),1E+99)),4)) 

Это формула массива и должны быть подтверждены с Ctrl-Shift-Enter на выходе режим редактирования. Если все сделано правильно, Excel поместит {} вокруг формулы.

enter image description here

+0

Спасибо, Скотт, он работает, и, как вы любезно указали с небольшим исключением, с которым я могу полностью жить, спасибо вам, ваша предоставленная формула работает фантастически ... СПАСИБО. – Miaka3

0

Если макросы разрешены вы можете создать модуль кода и поместить этот код в нем:

Public Function GetYear(text As String) 
    Dim regex 
    Set regex = CreateObject("VBScript.RegExp") 
    regex.Pattern = ".*(\d{4}).*" 
    Set matches = regex.Execute(text) 

    GetYear = matches(0).Submatches(0) 
End Function 

Затем, вы можете использовать формулу как «= GetYear (A1)», чтобы получить все годы, включая 1840-е годы и другие подобные форматы. Он в основном ищет группу из четырех цифр рядом друг с другом в данной строке. Не лучший алгоритм сопоставления даты, но кажется, что этого будет достаточно для вашего варианта использования.

+0

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

0

Используя формулу MS Excel, предоставленную Скоттом, я смог сделать небольшой трюк, который разрешил проблему также захвата/извлечения только дат и других подобных. Это было достигнуто только добавлением символа Asterisk подстановочного символа для представления любой серии символов, следуя вопросительным знакам «??». Спасибо Scott ... = IFERROR (TRIM (MID (A2, MIN (IFERROR (ПОИСК ({"16 ?? *", "17 ?? *", "18 ?? *", "19 ?? *"}, A2 & ""), 1E + 99)), 4)), "")

+0

Вы получите ложные срабатывания с этим. Посмотрите на возврат за «19 января 1748 года», он вернет «19 1», потому что он находит день первым. Именно по этой причине я сделал то, что сделал. Шахта, по крайней мере, уменьшит количество, которое вам нужно будет сделать вручную. –

+0

Скотт, вы правы ... Я испытал то, что вы указали, таким образом, я вернулся к вашей предоставленной формуле. Благодаря.. – Miaka3

 Смежные вопросы

  • Нет связанных вопросов^_^