Извлечение текста из длинной строки с помощью Excel - PullRequest
0 голосов
/ 31 октября 2018

Какую формулу мне следует использовать, если я хочу извлечь определенный текст или дату из длинной строки? Текст в столбец не работает, потому что у меня есть список противоречивых данных. Используя приведенный ниже пример, я хотел бы извлечь Женские и Дата рождения.

Например, {'Имя:' 'Джон Доу', 'Возраст:' '29', 'Пол:' 'Женщина', 'Дата рождения:' '1989-09-28', 'Страна:' 'Великобритания'}

Я прочитал MID, LENS, RIGHT и LEFT, но на самом деле не уверен, как мне это сделать. Буду очень признателен, если кто-то может помочь мне в этом!

Ответы [ 3 ]

0 голосов
/ 31 октября 2018

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

=MID(A1,FIND("Gender:",A1)+9,FIND("'",A1,FIND("Gender:",A1)+9)-FIND("'",A1,FIND("Gender:",A1)+8)-1)

Вам нужно найти кавычку до и после значения Gender, а затем сделать середину, Подобное можно сделать на дату рождения

0 голосов
/ 31 октября 2018

Небольшая сложность использования LEFT () и RIGHT () заключается в том, что MALE и FEMALE имеют разное количество букв. Итак, вам нужно использовать немного абстрактного мышления. Чтобы использовать LEFT () и RIGHT (), вы можете сделать следующее (при условии, что информация находится в ячейке A1):

=RIGHT(LEFT(A1,FIND("',",A1,FIND("Gender",A1))-1),FIND("',",A1,FIND("Gender",A1))-FIND("Gender",A1)-9)

Это вернет "Женский" или "Мужской" в зависимости от того, какие отдельные входы. (-18 происходит от расстояния от начала Пола до начала (Fe) Самца, используемого дважды).

Точно так же мы можем сделать то же самое для даты рождения. Однако, так как это поле постоянной длины, мы можем использовать действительные числа.

=RIGHT(LEFT(A1,FIND("birth:''",A1)+17),10)

Надеюсь, это поможет!

0 голосов
/ 31 октября 2018

Вы можете создать пользовательский UDF.

Public Function getDemographics(inputString As String, retType As Long) As String

    If retType < 0 Or retType > 1 Then
        getDemographics = "Invalid retType!"
        Exit Function
    End If

    Dim retArr(1)

    With CreateObject("VBScript.RegExp")
        .Pattern = "'Gender:''(\w+).*?'Date of birth:''([\d-]+)"
        If .test(inputString) Then
            With .Execute(inputString)(0)
                retArr(0) = .SubMatches(0)
                retArr(1) = .SubMatches(1)
                getDemographics = retArr(retType)
            End With
        End If
    End With

End Function

Используются регулярные выражения. Вы предоставляете два аргумента, inputString, которые будут

{'Name:''John Doe', 'Age:''29', 'Gender:''Female','Date of birth:''1989-09-28', 'Country:'"United Kingdom'}

и retType. 0 для пола и 1 для DOB.

На вашем рабочем листе вы бы просто вызвали функцию как:

=getDemographics(A1,1)

Что вернет:

1989-09-28

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