Professional Documents
Culture Documents
br/excel/manipulacao_de_texto/
Principal
Dicas Introduo
Office/VBA -Nmeros
Suplementos -Datas
-Explicao
Referncias
Introduo
Embora o Excel no seja um editor de texto, ele possui ferramentas incrveis para anlise e
extrao de texto. Uma clula pode comportar at 32.767 caracteres, e normalmente este
limite mais que suficiente.
O objetivo deste artigo fornecer exemplos de operaes com funes que tratam texto
(strings) e so utilizadas frequentemente.
Todo caracter possui um cdigo ASCII (American Standard Code for Information Interchange).
Esse cdigo, para caracteres comuns, normalmente fixo entre todas Aplicaes e todas
plataformas. Se por algum motivo voc precisar saber o cdigo ASCII de um caractere, use:
=CDIGO("B")
Se quiser fazer o caminho inverso, isto , descobrir qual o caractere a partir do cdigo ASCII,
use:
=CARACT(66)
Existem dois mtodos: um que ignora se caracteres esto em maisculo ou minsculo e outro
que leva em conta caracteres maisculo e minsculos. Veja o exemplo abaixo:
Nmeros
Seria bem melhor se, ao invs de 123456, mostrasse R$ 1.234,56. Para tal, escreva:
(se quiser saber sobre regras para formatao personalizada de nmeros, me mande um e-
mail)
O resultado final:
Nota: para esse caso particular, em que a formatao desejada de moeda, poderia usar
tambm:
Dessa forma, o Excel usar a formatao padro de moeda para aplicar ao nmero.
Datas
A frmuma B9 :
Para o Excel, as datas no passam de um nmero (se quiser saber mais sobre esse assunto,
veja a seo de datas deste artigo). Ento, quando a mesma referenciada numa frmula, o
Excel no aplica a formatao padro, de data. Para que a formatao fique igual clula
B10, use a frmula:
A frmula :
=REPT("Felipe ";3)
A funo ARRUMAR remove excesso de espaos antes, no meio e depois de uma cadeia de
caracteres. A funo TIRAR remove caracteres no imprimveis, como quebras de texto, por
exemplo. Confira os exemplos abaixo:
Em A3:
=ARRUMAR(A1)
Em A7:
=TIRAR(A5)
Em A2:
=NM.CARACT(A1)
A frmula abaixo conta a quantidade de e presente no texto Felipe Costa Gualberto e retorna,
corretamente, 3.
=NM.CARACT(A7)-NM.CARACT(SUBSTITUIR(A7;"e";""))
Explicao: subtrai-se o nmero total de caracteres pelo nmero de caracteres de quando se
substitui e por vazio (em outras palavras, quando se eliminam os e). O resultado dessa
expresso a quantidade de e que foram removidos do texto original.
A frmula :
=NM.CARACT(A19)-NM.CARACT(SUBSTITUIR((A19);" ";""))+1
No entanto, preste ateno: a frmula retornar 1 se estiver em branco. Para corrigir esse
problema, use simplesmente um SE:
=SE(NM.CARACT(A24)=0;0;NM.CARACT(A24)-NM.CARACT(SUBSTITUIR(A24;"
";""))+1)
A diferena deste caso para o anterior que deseja-se contar quantas palavras Costa, e no
caracteres, possui dentro do texto Felipe Costa Gualberto Costa. Observe a figura abaixo:
A frmula utilizada :
=(NM.CARACT(A13)-NM.CARACT(SUBSTITUIR(A13;A14;"")))/NM.CARACT(A14)
Em A8:
=MAISCULA(ESQUERDA(A7))&DIREITA(MINSCULA(A7);NM.CARACT(A7)-1)
A frmula possui duas partes: na primeira, em azul, pega-se o primeiro caractere e formata-se
em maisculo. Em seguida, todos os outros caracteres exceto o mais direita (ou o primeiro
esquerda) devero ser minsculos.
Existem trs funes nativas do Excel para extrair sequncias de texto dentro de uma outra:
As frmulas so:
=ESQUERDA(A1;6)
=DIREITA(A1;9)
=EXT.TEXTO(A1;8;5)
As funes ESQUERDA e
DIREITA necessitam de dois
parmetros de entrada: texto a
ser extrado e nmero de caracteres a serem extrados (se o segundo argumento for omitido,
apenas um caractere ser extrado). J a funo EXT.TEXTO possui trs parmetros: texto a
ser extrado, posio do caractere inicial a ser extrado e nmero de caracteres a serem
extrados.
Veja a figura abaixo:
=ESQUERDA(A33;PROCURAR(" ";A33)-1)
=DIREITA(A33;NM.CARACT(A33)-PROCURAR("^^";SUBSTITUIR(A33;"
";"^^";NM.CARACT(A33)- NM.CARACT(SUBSTITUIR(A33;" ";"")))))
PROCURAR("^^";SUBSTITUIR(A33;" ";"^^";NM.CARACT(A33)-
NM.CARACT(SUBSTITUIR(A33;" ";""))))
Note que a sequncia ^^ apenas um caractere temporrio arbitrrio, usando para fazer
clculos em cadeia.
Ela corresponde expresso que retorna a posio da ltima ocorncia, neste caso, de
espao. Se precisa de uma explicao mais detalhada para esta parte, veja a subseo
Retornar Posio da ltima Ocorrncia de um Caractere num Texto. Simplificando-se a
frmula, temos:
=DIREITA(A33;NM.CARACT(A33)-19)
Nota: Ambas frmulas falharo se o texto de origem possuir apenas uma palavra. Para
consertar essa situao, use as formas:
=SEERRO(ESQUERDA(A39;PROCURAR(" ";A39)-1);A39)
=SEERRO(DIREITA(A39; NM.CARACT(A39)-PROCURAR("*";SUBSTITUIR(A39;"
";"*";NM.CARACT(A39)- NM.CARACT(SUBSTITUIR(A39;" ";""))))); A39)
A frmula abaixo foi proposta por Frank Kabel com algumas modificaes feitas por mim:
Se voc usa o Excel 2003, experimente trocar na expresso abaixo o 2^31-1 por 1024:
=SE(OU(NM.CARACT(A47)=0;ERROS(PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48))));""; EXT.TEXTO(A47;PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48));SE(ERROS(PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48)));2^31-
1;PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48))-PROCURAR("^^";SUBSTITUIR("
"&A47;" ";"^^";A48)))))
Para o caso acima, a frmula extrai a terceira (clula A48) palavra da sequncia de texto em
A47. Voc pode usar essa frmula tambm para extrair outro delimitador sem ser o espao,
como a vrgula, por exemplo. Basta substitu-la na frmula.
Explicao
Antes de ler esta explicao, recomenda-se que voc domine a tcnica de avaliar uma frmula
(clique).
Considere que A47 Felipe Costa Gualberto Matos e A48 3. Logo, a frmula ter que
retornar Gualberto.
=SE(OU(NM.CARACT(A47)=0;ERROS(PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48))));""; EXT.TEXTO(A47;PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48));SE(ERROS(PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48)));2^31-
1;PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48))-PROCURAR("^^";SUBSTITUIR("
"&A47;" ";"^^";A48)))))
Em primeiro lugar, repare que na frmula como um todo que h substituies dee " " (um
espao em branco) em "^^". Logo depois, num nvel de aninhamento anterior, converte-se
novamente "^^" em " ";. Isso ocorre porque a frmula transforma temporariamente os espaos
em branco para fazer os clculos necessrios.
Logo, SUBSTITUIR(" "&A47;" ";"^^";A48) significa que na expresso " Felipe Costa
Gualberto Matos" (com um espao antes de Felipe!) ser buscado o terceiro espao (porque
A48 igual a 3) e o mesmo ser substitudo por ^^. A expresso se retornar ento " Felipe
Costa^^Gualberto Matos". Em seguida, ser usada a funo PROCURAR nessa expresso,
buscando o termo ^^. Ora, o termo ^^ s existir se a frmula de SUBSTITUIR tiver sido bem
sucedida. Se no tiver sido bem sucedida, retornar um erro.
Logo, da expresso
=SE(OU(NM.CARACT(A47)=0;ERROS(PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48))));""; EXT.TEXTO(A47;PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48));SE(ERROS(PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48)));2^31-
1;PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48))-PROCURAR("^^";SUBSTITUIR("
"&A47;" ";"^^";A48)))))
Se as duas condies foram satisfeitas, ento a frmula retornar a parte em rosa, que ,
reescrita com novas cores:
EXT.TEXTO(A47;PROCURAR("^^";SUBSTITUIR(" "&A47;"
";"^^";A48));SE(ERROS(PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48)));2^31-
1;PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48))-PROCURAR("^^";SUBSTITUIR("
"&A47;" ";"^^";A48))))
Ser extrado do termo azul (Felipe Costa Gualberto Matos) uma sequncia de texto que inicia
do caractere que retornado pelo nmero verde e possui um nmero de caracteres igual ao
valor retornado pela parte rosa.
A parte em verde j foi mostrada anteriormente: Sabemos que ela no vai dar erro aqui porque
o teste condicional do aninhamento anterior passou com sucesso. Ela retornar qual a
posio onde se inicia o terceiro espao (na verdade, a terceira ocorrncia de ^^ na expresso
Felipe Costa^^Gualberto Matos, que 14. A parte em negrito (comeando no G) corresponde
ao 14o caractere a seguir.
Agora, precisamos que a parte rosa da frmula nos retorne 9, que o comprimento do termo
Gualberto. Veja como ela faz isso, ao reescrevermos ela com outras cores:
SE(ERROS(PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48)));2^31-
1;PROCURAR("^^";SUBSTITUIR(A47;" ";"^^";A48))-PROCURAR("^^";SUBSTITUIR("
"&A47;" ";"^^";A48)))
Se a parte em azul em for verdadeira, o nmero de caracteres extrados ser 2^31-1; caso
contrrio, ser a parte rosa.
A parte em azul idntica primeira expresso que combina PROCURAR com SUBSTITUIR,
exceto que ao invs de se fazer a substituio no termo " "&A47, faz-se simplesmente em
A47. Isso significa que retiramos o espao extra dado frmula. Logo, se agora o nmero de
espaos um a menos que o nmero de termos, se procurarmos o ltimo termo, a expresso
em azul retornar um erro.
Em outras palavras, se a expresso azul retornar um erro, significa que o termo buscado o
ltimo e, sendo o ltimo, a funo PROCURAR retorna um erro e o nmero de caracteres
repassados EXT.TEXTO ser 2^31-1. Esse nmero equivale 2147483647, que
simplesmente o nmero mximo de caracteres suportados pela funo.
Se o termo buscado ento no for o ltimo, ento ser retornado o nmero calculado pela
parte rosa. Ora esse nmero simplesmente a diferena das funes de PROCURAR do A47
concatenado sem o espao e do A47 concatenado com o espao. Note que essa expresso
daria erro se o termo buscado fosse o ltimo, da a necessidade de existir o teste condicional
anterior.
Em outras palavras, pega-se a posio que inicia o termo n+1 e subtrai-se da posio que
inicia o termo n. A diferena desses dois nmeros o tamanho da sequncia de texto a ser
extrada. No nosso caso, ser feita a conta 23 - 14 , que igual a 9, o nmero de caracteres
que Gualberto possui.
O artigo a seguir demonstra como se extrai nmeros de uma sequncia composta de texto e
nmeros. Ver artigo: Extrair Sequncia Numrica de Expresso Alfanumrica.
SUBSTITUIR - Troca um texto por outro. Utilize essa funo quando souber qual sequncia de
caracteres ser trocada.
MUDAR - Troca um texto por outro. Utilize essa funo quando souber qual a posio da
sequncia de caracteres a ser trocada.
=SUBSTITUIR(A1;"Costa";"Barriga";2)
A funo SUBSTITUIR possui trs ou quatro parmetros. Na linha 2, foram usados trs
parmetros: o texto a ser substitudo, a sequncia de texto a ser substituda e o texto que ir
substituir. Note que todas ocorrncias de Costa foram substitudas por Barriga. Na linha 3, um
quarto parmetro utilizado (nmero 2), que significa que apenas a segunda ocorrncia
encontrada de Costa ser substituda por Barriga.
=MUDAR(A1;8;5;"Matos")
=MUDAR(A1;14;0;"Matos ")
A funo MUDAR apresenta trs parmetros: o texto a ser substitudo, a posio inicial de
onde comear a substituio, o nmero de caracteres que sero substitudos e a sequncia
de caracteres que entrar no lugar.
No costumo usar muito MUDAR, e sim SUBSTITUIR. Normalmente, quando uso MUDAR,
da forma como mostrado na linha 5, quando quero adicionar uma palavra no meio de uma
sequncia de caracteres.
O Excel possui duas funes nativas para busca de posio de um texto dentro de outro:
=PROCURAR("gualberto";$A$1)
=PROCURAR("Gu?lb*os";$A$1)
=PROCURAR("Costa";$A$1)
=PROCURAR("Costa";$A$1;9)
PROCURAR pode possuir dois ou trs parmetros. Se forem usados dois parmetros, o
primeiro corresponde expresso buscada e o segundo ao texto em que se busca a
sequncia. Caso uma sequncia no seja encontrada, o erro #VALOR! retornado.
Na linha 2, observe que Gualberto comea na posio 14 do texto. Isso justifica o valor
retornado pela frmula.
Na linha 4, foram utilizados caracteres curingas. Um erro foi retornado porque PROCURAR
interpreta sequncias com caracteres curingas literalmente (se quiser saber sobre caracteres
curingas, me envie um e-mail).
Caso seja usado um terceiro parmetro (que se oculto, o valor padro 1), a sequncia ser
buscada a partir de uma posio especificada. Como na linha 5 foi oculta, a primeira
ocorrncia encontrada de Costa foi no caractere 8 do texto. No entanto, conforme linha 6, se a
busca comear a partir do caractere 9, tem-se outra ocorrncia de Costa apenas na posio
24.
Para PESQUISAR:
=PESQUISAR("Gualberto";$A$1)
=PESQUISAR("gualberto";$A$1)
=PESQUISAR("Gu?lb*os";$A$1)
=PESQUISAR("Costa";$A$1)
=PESQUISAR("Costa";$A$1;9)
Observe tambm que na linha 10 o valor 14, corretamente retornado, diferente de quando se
tenta usar caracteres curingas com PROCURAR (que retorna um erro).
A frmula utilizada :
=PROCURAR("^^";SUBSTITUIR(A16;A17;"^^";NM.CARACT(A16)-
NM.CARACT(SUBSTITUIR(A16;A17;""))))
A explicao da frmula :
NM.CARACT(A16)-NM.CARACT(SUBSTITUIR(A16;A17;""))
SUBSTITUIR(A16;A17;"^^";NM.CARACT(A16)-NM.CARACT(SUBSTITUIR(A16;A17;"")))
SUBSTITUIR(A16;A17;"^^";5)
Dessa forma, deseja-se ento extrair a quinta ocorrncia da expresso por um caractere
diferente do original, algo que provavelmente no vai aparecer de nenhuma forma em sua
expresso, como ^^. O resultado dessa expresso ser:
Finalmente a frmula:
Essa funo til para extrair o nome de um arquivo a partir de um caminho, como pode-se
ver no exemplo abaixo:
A frmula :
=EXT.TEXTO(A28; PROCURAR("^^";SUBSTITUIR(A28;"\";"^^";NM.CARACT(A28)-
NM.CARACT(SUBSTITUIR(A28;"\"; ""))))+1; NM.CARACT(A28))
PROCURAR("^^";SUBSTITUIR(A28;"\";"^^";NM.CARACT(A28)-
NM.CARACT(SUBSTITUIR(A28;"\"; ""))))+1
Neste caso, o valor 16+1=17. Note que o +1 usado porque deseja-se, futuramente, extrair
o caractere imediatamente aps a barra. Simplificando a frmula, temos:
=EXT.TEXTO(A28;17;NM.CARACT(A28))
=PROCURAR("^^";SUBSTITUIR(A22;A23;"^^"; (NM.CARACT(A22)-
NM.CARACT(SUBSTITUIR(A22;A23;"")))/NM.CARACT(A23)))
(NM.CARACT(A22)-NM.CARACT(SUBSTITUIR(A22;A23;"")))/NM.CARACT(A23)
=PROCURAR("^^";SUBSTITUIR(A22;A23;"^^";3))
A terceira (e ltima) ocorrncia de Costa ser substituda por ^^, e por fim PROCURAR
identifica a posio do incio da sequncia.
Referncias
Para fazer o download da Pasta de Trabalho com todos os exemplos, clique aqui.
---