В настоящее время у меня есть это в ячейке A1:

"timeZone":"Etc/UTC"}, "body":"[~ kevin.tom] [~ sergio.Мелле] [~ seema.item] Был ли отчет доставлен клиенту?"," updateAuthor ":" body ":" [~ katelyn.robert]\r\n\r\nНе пока "," updateAuthor ":

И я хочу извлечь все между

"Тело":»

а также

"" UpdateAuthor

Как вы можете видеть в A1, если я разделю содержимое между "body":"и", updateAuthor, у нас будет два результата:

[~ kevin.tom] [~ Серхио.Мелле] [~ seema.item] Был ли отчет доставлен клиенту?

а также

[~ katelyn.robert]\r\n\r\nНе пока "," updateAuthor

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

[~ katelyn.robert]\r\n\r\nНе пока "," updateAuthor

Я всегда буду добавлять больше в ячейку A1, и мне нужна ячейка B1, чтобы обновить и получить последний результат, каким бы он ни был.

В настоящее время я смог придумать этот код в ячейке B1:

= MID(B1, FIND("тело", B1)+7, FIND("updateAuthor", B1, FIND("тело", B1)+1)-FIND("тело", B1)-10)

Это работает для меня, но извлекает первый результат, который он находит, тогда как я хотел бы получить результаты последнего вхождения. По сути, Excel ищет слева направо, когда я хотел бы искать справа налево. Кто-нибудь знает, как изменить это, чтобы оно работало?

В настоящее время с моим кодом в B1 я получаю это в B1:

[~ kevin.tom] [~ Серхио.Мелле] [~ seema.item] Был ли отчет доставлен клиенту?

Но я хочу этого:

[~ katelyn.robert]\r\n\r\nНе пока

Я пытаюсь сделать это без использования VBA

2 ответа2

0

Хорошо, я просто хочу заявить, что действительно считаю, что с VBA это будет легче выяснить, но мне было любопытно сделать это как формулу.

=MID(A1,FIND("body",A1,FIND("body",A1,1)+1)+7,FIND("updateAuthor",A1,FIND("updateAuthor",A1,1)+1)-(FIND("body",A1,FIND("body",A1,1)+1)+10))

Это предполагает, что вы можете использовать "body" и "updateAuthor", как вы это делали в предоставленной вами формуле. Если вы действительно хотите найти строки символов с символами пунктуации, такими как "body"." Тогда для поиска потребуется что-то вроде CHAR(34) & "body" & CHAR(34) & ":" & CHAR(34) и CHAR(34) & "," & CHAR(34) & "updateAuthor" . Если вы сделаете это, вам также придется изменить добавленные номера смещений (+7 и +10).

Это также предполагает, что в ячейке есть два и только два автора. Этот подход не будет работать, если у вас есть переменное количество авторов.

Синтаксис для функции Mid: MID(text,start_num,num_chars) .

Синтаксис для функции Find - FIND(find_text,within_text,start_num) .

FIND("body",A1,FIND("body",A1,1)+1)+7

Это дает вам начальный номер для функции Mid.

Внутренняя находка FIND("body",A1,1) возвращает местоположение первого появления "body" в A1. Вам нужно добавить 1 к этому для начального номера следующей находки, или вы просто получите то же место. Затем находка извне снова смотрит на А1 на "тело", но начинает искать один символ после местоположения первого вхождения. Вы должны добавить смещение, чтобы найти местоположение первого символа после вашего "body":" потому что функция поиска скажет вам, где находится b .

FIND("updateAuthor",A1,FIND("updateAuthor",A1,1)+1)-(FIND("body",A1,FIND("body",A1,1)+1)+10

Это дает вам количество символов для функции Mid.

Эти рекурсивные операторы поиска работают так же, как и выше, чтобы найти разницу между началом информации об авторе и началом конечного тега ","updateAuthor , с соответствующим смещением, добавленным в конце.

0

Если вы пересмотрите и примете VBA, рассмотрите следующую пользовательскую функцию:

Public Function GrabData(s As String) As String
    Dim dq As String
    dq = Chr(34)
    arr = Split(s, "body" & dq & ":" & dq)
    brr = Split(arr(UBound(arr)), dq & "," & dq & "updateAuthor")
    GrabData = brr(0)
End Function

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .