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.