Como posso extrair caracteres entre duas palavras no Excel, mas pesquisar da direita para a esquerda

0

Atualmente, tenho isso na célula A1:

"timeZone":"Etc/UTC"},"body":"[~kevin.tom] [~sergio.Melle] [~seema.item] Was the report delivered to the client?","updateAuthor":"body":"[~katelyn.robert]\r\n\r\nNot yet","updateAuthor":

E eu quero extrair tudo entre

"body":"

e

","updateAuthor

Como você pode ver na A1, se eu dividir o conteúdo entre "body": "and", "updateAuthor, temos dois resultados:

[~kevin.tom] [~sergio.Melle] [~seema.item] Was the report delivered to the client?

e

[~katelyn.robert]\r\n\r\nNot yet","updateAuthor

Eu quero poder extrair o último resultado, que é

[~katelyn.robert]\r\n\r\nNot yet","updateAuthor

Eu sempre adicionarei mais à célula A1 e precisarei da Cell B1 para atualizar e puxar o último resultado, seja ele qual for.

Atualmente, consegui criar este código na célula B1:

= MID (B1, FIND ("corpo", B1) +7, FIND ("updateAuthor", B1, FIND ("corpo", B1) +1) -FIND ("corpo", B1) -10)

Isso funciona para mim, mas ele extrai o primeiro resultado que encontra, enquanto eu gostaria dos resultados da última ocorrência. Essencialmente, o Excel pesquisou da esquerda para a direita quando eu gostaria de pesquisar da direita para a esquerda. Alguém sabe como modificar isso para que funcione?

Atualmente, com meu código em B1, estou recebendo isso em B1:

[~kevin.tom] [~sergio.Melle] [~seema.item] Was the report delivered to the client?

Mas eu quero isso:

[~katelyn.robert]\r\n\r\nNot yet

Estou tentando realizar isso sem usar o VBA

    
por Kevin Truong 09.07.2018 / 20:31

2 respostas

0

OK, eu só quero dizer que realmente acredito que seria mais fácil descobrir isso com o VBA, mas eu estava curioso o suficiente para fazer isso como uma fórmula.

=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))

Isso pressupõe que você pode usar "body" e "updateAuthor" como fez na fórmula que você forneceu. Se você realmente quiser procurar pelas cadeias de caracteres com os símbolos de pontuação, como "body"." , a localização precisará de algo como CHAR(34) & "body" & CHAR(34) & ":" & CHAR(34) e CHAR(34) & "," & CHAR(34) & "updateAuthor" . Se você fizer isso, você também terá que alterar os números de offset que são adicionados (+7 e +10).

Isso também pressupõe que há dois e apenas dois autores na célula. Essa abordagem não funcionará se você tiver um número variável de autores.

A sintaxe da função Mid é MID(text,start_num,num_chars) .

A sintaxe da função Localizar é FIND(find_text,within_text,start_num) .

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

Isso lhe dá o número inicial para a função Mid.

A parte interna encontra FIND("body",A1,1) retorna a localização da primeira ocorrência de "corpo" em A1. Você precisa adicionar 1 para o número inicial do próximo achado ou apenas obterá o mesmo local. O find externo então olha para A1 novamente para "body", mas começa a procurar um caractere após a localização da primeira ocorrência. Você precisa adicionar um deslocamento para encontrar a localização do primeiro caractere após o seu "body":" , porque a função de localização lhe dirá onde está o b .

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

Isso lhe dá o número de caracteres para a função Mid.

Essas instruções de localização recursivas funcionam da mesma forma acima para encontrar a diferença entre o início das informações do autor e o início da tag final, ","updateAuthor , com o deslocamento apropriado adicionado no final.

    
por 10.07.2018 / 00:26
0

Se você considerar novamente e aceitar o VBA, considere a seguinte função definida pelo usuário:

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

    
por 10.07.2018 / 01:54