Как извлечь данные из объединенной строки в макросе Excel - PullRequest
0 голосов
/ 14 мая 2018

Я новичок в этом - пытаюсь извлечь имя и дату из объединенной текстовой строки - каждая строка имеет имя с месяцем - все разные, и месяц должен быть изменен для каждого поиска.
[Прикреплен скриншот моих результатов с использованием MID, который извлекает дату] [1]

Я пытался использовать MID и RIGHT, используя первую заглавную букву слева от запятой, но безуспешно. Любая помощь будет оценена.

У меня есть скрипт, который обрабатывает данные - вот код VBA для извлечения имени и даты: название ActiveCell.Formula = "= IFERROR (MID (C3,1, FIND (" "January" ", C3,1) -1), IFERROR (MID (C3,1, FIND (" "February" ", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" март "", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" апрель "", C3,1) -1 ), IFERROR (MID (C3,1, FIND ( "" Может "", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" июня "", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" июль "", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" Август "", C3,1) -1), IFERROR ( MID (C3,1, FIND ( "" сентября "", C3,1) -1), IFERROR (MID (C3,1, FIND ( "" Октябрь "", C3,1) -1), IFERROR (MID ( C3,1, FIND ("" Ноябрь "", C3,1) -1), IFERROR (MID (C3,1, FIND ("" Декабрь "", C3,1) -1) "" Нет совпадений "" )))))))))))) "

Дата ActiveCell.Formula = "= IFERROR (MID (C3, FIND (" "January" ", C3) * 1,20), IFERROR (MID (C3, FIND (" "February" ", C3) * 1,20), IFERROR (MID (C3, FIND ( "" март "", C3) * 1,20), IFERROR (MID (C3, FIND ( "" Апрель "", C3) * 1,20), IFERROR (MID (C3, FIND ( "" Может "", C3) * 1,20), IFERROR (MID (C3, FIND ( "" июня "", C3) * 1,20), IFERROR (MID (C3, FIND ( "" июль» », C3) * 1,20), IFERROR (MID (C3, FIND ( "" Август "", C3) * 1,20), IFERROR (MID (C3, FIND ( "" сентября "", C3) * 1 , 20), ЕСЛИОШИБКА (MID (С3, FIND ( "" Октябрь "", С3) * 1,20), ЕСЛИОШИБКА (MID (С3, FIND ( "" ноябрь "", С3) * 1,20), ЕСЛИОШИБКА ( MID (C3, FIND ( "" декабря "", C3) * 1,20), "" Нету "")))))))))))) "

Я уверен, что есть более простой способ - я просто не понял, и на меня оказывают давление, чтобы получить эти данные -

! [1]: https://i.stack.imgur.com/dT92Q.jpg

1 Ответ

0 голосов
/ 14 мая 2018

Вот две пользовательские функции:

Public Function DateGrabber(s As String) As Date
    Dim temp As String, temp2 As String, i As Long, L As Long
    temp = s
    temp2 = ""
    L = Len(s)
    For i = L To 1 Step -1
        temp2 = Mid(temp, i, 1) & temp2

        If Mid(temp, i, 1) Like "[A-Z]" Then
            DateGrabber = CDate(temp2)
            Exit Function
        End If
    Next i
End Function


Public Function DateDiscarder(s As String) As String
    Dim i As Long, L As Long
    L = Len(s)
    For i = L To 1 Step -1
        If Mid(s, i, 1) Like "[A-Z]" Then
            DateDiscarder = Left(s, i - 1)
            Exit Function
        End If
    Next i
End Function

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

Второй UDF просто отбрасывает дату, используя те же критерии:

enter image description here

...