Extrai a última palavra de uma frase menos qualquer pontuação final

1

Eu tenho uma planilha do Excel com sentenças (total de 50), todas em linhas diferentes. Eu tenho que extrair a última palavra em cada frase, excluindo pontuação. As frases têm diferentes números de caracteres. A primeira frase é “Maria toca piano”.

Euconseguiissousando2célulasdiferentes.Umacélula=RIGHT(J1,6)tirapiano.Apróximacélulafazreferênciaaessaeé=Substitute(S1,"."," ") , que retira o período.

Eu gostaria de combinar o 2 em uma célula e ser capaz de preencher automaticamente todas as 50 sentenças. As outras frases não têm o mesmo número de caracteres e têm pontuação diferente. O que é uma fórmula que funcionaria para isso? Estou assumindo uma fórmula de substituição juntamente com um RIGHT

    
por Khris85 13.06.2018 / 15:05

2 respostas

1

Você está definitivamente no caminho certo com as funções RIGHT() e SUBSTITUTE() .

Vamos percorrer o processo de generalização e combinação das fórmulas.

Para isso, trabalharemos com a frase What to do? in A1 , sua fórmula RIGHT() em B1 e sua fórmula SUBSTITUTION() em C1 . Assim, suas fórmulas seriam =RIGHT(A1,3) e =SUBSTITUTE(B1,"?","") :



Etapa1

Precisamosgeneralizar:

<1> RIGHT(A1,3)

O 3 , que é a duração da última palavra, incluindo qualquer pontuação seguinte, precisa ser modificado para funcionar com qualquer frase. Uma maneira de fazer isso é perceber que o comprimento da última palavra pode ser calculado a partir do tamanho da frase e do índice baseado em um do último espaço.

Para o nosso exemplo, o tamanho é 11 e o índice do último espaço é 8,

What to do?
       ↑  ↑
12345678  11

e 11 - 8 → 3

O comprimento pode ser calculado com:

<2> LEN(A1)

O índice é um pouco mais complicado, pois FIND() só pode ser usado para encontrar o índice do primeiro espaço, não outro qualquer. No entanto, podemos usar SUBSTITUTE() para ajudar, pois faz nos permitir substituir qualquer espaço específico. Se mudarmos o último espaço para um caractere que não existe em outro lugar na sentença, poderíamos então usar FIND() para encontrá-lo e, assim, o índice.

A fórmula para fazer a substituição é

<3>  SUBSTITUTE(A1," ","§",2)

em que 2 é o número da ocorrência do último espaço, ou seja, o segundo espaço, e esperamos que § não exista.

Podemos então usar <3> para encontrar o índice do último espaço assim:

<4>  FIND("§",SUBSTITUTE(A1," ","§",2))

Mas como resolvemos o 2 ? Isso é um pouco complicado. Observe que o número de ocorrência do último espaço na sentença é o mesmo que o contagem dos espaços na sentença.

A contagem pode ser calculada removendo os espaços da sentença. Isso reduz seu comprimento pela contagem. Deste e do tamanho original, podemos obter a contagem:

<5>  LEN(A1)-LEN(SUBSTITUTE(A1," ",""))

Conectar isso de volta a <4> leva à fórmula do índice do último espaço:

<6>  FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Subtrair isso de <2> leva à duração da última palavra:

<7>  LEN(A1)-FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))

Conectar <7> de volta a <1> leva ao generalizado

<8>  RIGHT(A1,LEN(A1)-FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ","")))))


Etapa 2

Precisamos generalizar:

<9> SUBSTITUTE(B1,"?","")

Agora, como SUBSTITUTE() retorna a string de destino não modificada, se a string de pesquisa não puder ser encontrada, podemos "encadear" mais de uma função para remover vários caracteres de pontuação possíveis. Por exemplo, para também remover um ! , faríamos isso:

<10> SUBSTITUTE(<9>,"!","")

Conectando <9> em <10> dá:

<11> SUBSTITUTE(SUBSTITUTE(B1,"?",""),"!","")

Como há apenas três caracteres de pontuação no final de uma frase, ? , ! e . (espero), <10> pode ser totalmente generalizado para isso:

<12>  SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B1,"?",""),"!",""),".","")


Etapa 3

Combinar as duas fórmulas é uma questão simples de substituir o B1 em <12> por <8> , o que leva à solução:

=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(RIGHT(A1,LEN(A1)-FIND("§",SUBSTITUTE(A1," ","§",LEN(A1)-LEN(SUBSTITUTE(A1," ",""))))),"?",""),"!",""),".","")

Notas:

Se não houver pontuação no final da frase (que é o caso da frase 21 vista na captura de tela), as funções SUBSTITUTE() não farão nada e a última palavra será retornada corretamente.

Se as frases em seu conjunto de dados puderem terminar em outro caractere, digamos, como : , a fórmula poderá ser facilmente modificada para atender a isso.

Por fim, como há sempre um espaço entre o número da sentença e a primeira palavra, não há necessidade de verificação de erros na fórmula. No entanto, irá retornar um erro se não houver uma sentença.

    
por 14.06.2018 / 10:29
0

Eu uso o add-in RegEx Find / Replace do Excel gratuito para obter a funcionalidade de expressão regular. Isso facilita a vida em situações como a sua.

Com isso, a fórmula será parecida com: =RegExReplace(A1,".* ([a-zA-Z]+)[.?!]*$","$1")

Onde:

  • =RegExReplace(A1,...) procura conteúdo no A1
  • .* - para qualquer coisa na célula terminada por um espaço
  • ([a-zA-Z]+) - seguido por uma palavra (que pode conter letras maiúsculas e minúsculas) e lembra essa palavra
  • [.?! ]* - seguido por qualquer número (incluindo 0) de caracteres de pontuação e espaço
  • $" - pouco antes do final da célula
  • ,"$1" - então substitui todo o conteúdo da célula pela palavra lembrada.

    
por 14.06.2018 / 12:00