Aprenda a extrair números de um texto com um simples código vba usando a função de tratamento de texto "Len" junto com a função "isnumeric". Venha conferir!
A função "Len(texto)" retorna o número de caracteres existente no texto dentro dela. A função "Mid(texto, número inicial, número de caracteres)" retorna os caracteres que estiverem a partir do número inicial até o limite do segundo número. Já a função "isnumeric(expressão)" determina se a expressão dentro dela é um número ou não. Com essas duas ferramentas e um pouco de criatividade podemos separar números de letras de um determinado texto.
Vamos imaginar uma tabela que começa na linha 5 e vai até a linha 200. Imaginemos também que a coluna "A" desta tabela possua nomes próprios com letras e números ( devido a uma má digitação ). O usuário, frente a esse problema, precisará retirar os números dos nomes. Para este cenário, criamos estas linhas de código:
Lin = 5
Do While Lin < 200
Cells(Lin, 1).Select
NomeSujo = ActiveCell.Value
For Num = 1 To Len(NomeSujo)
Caract = Mid(NomeSujo, Num, 1)
If IsNumeric(Caract) Then
GoTo Pula1
Else
NomeLimpo = NomeLimpo & Caract
End If
Pula1:
Next
Cells(Lin, 1).Value = NomeLimpo
NomeLimpo = ""
Lin = Lin + 1
Loop
No código acima, temos:
Lin = variável que irá representar as linhas da tabela;
NomeSujo = variável que irá representar os nomes cheios de números;
NomeLimpo = variável que irá representar os nomes sem os números;
Num = variável que irá representar o número do caractere do NomeSujo que será analizado;
Caract = variável que irá representar o caractere do NomeSujo indicado por Num.Vamos imaginar que o primeiro nome da coluna "A" seja "Carlos123 Alberto Torres". Agora, vamos a análise do código acima, parte por parte:
1 ) Início do Loop onde o primeiro valor de "Lin" será "5".
Lin = 5
Do While Lin < 200
2 ) A célula "A5" será selecionada e a variável "NomeSujo" assumirá o texto "Carlos123 Alberto Torres".
Cells(Lin, 1).SelectNomeSujo = ActiveCell.Value
3 ) "Num" irá variar de 1 até 25, pois "NomeSujo"possui 25 caracteres. Sendo assim, o primeiro valor de "Num" será "1".
For Num = 1 To Len(NomeSujo)
Veja este vídeo: https://youtu.be/hALUIhunsow

4 ) Caract será igual a "C". Para entender a função "Mid", veja a imagem abaixo.
Veja este vídeo: https://youtu.be/hALUIhunso
5 ) Temos aqui um condicional, onde:
a ) se "Caract" for númerico, o código irá executar o GoTo pulando para um ponto chamado "Pula1".
b ) se "Caract" não for numérico, o código irá executar a linha "NomeLimpo = NomeLimpo & Caract".
If IsNumeric(Caract) Then
GoTo Pula1
Else
NomeLimpo = NomeLimpo & Caract
End If
Pula1:
Next
6 ) Como "Caract" é igual a "C", o código irá executar "NomeLimpo = NomeLimpo & Caract" onde "NomeLimpo" irá agregar o "C".
7 ) Fim do Looping fazendo o código executar novamente "For Num = 1 To Len(NomeSujo)" onde "Num" será igual a "2".
Next
8 ) Com "Num" igual a "2", "Caract" será igual agora a "a", o segundo caractere do "NomeSujo" que é "Carlos123 Alberto Torres".
Caract = Mid(NomeSujo, Num, 1)
9 ) Esse código irá girar até o "NomeLimpo" agregar todos os caracteres de "NomeSujo" sem o números. Feito isso, a célula onde estava "NomeSujo" será substituído por "NomeLimpo".
Cells(Lin, 1).Value = NomeLimpo
10 ) A variável "NomeLimpo" precisará sem esvaziada. Em seguida, "Lin" precisará subir um valor. E por fim, o looping para que a próxima célula da coluna "A" seja também avaliada.
NomeLimpo = ""
Lin = Lin + 1
Loop
Para maiores explicações, assista ao nosso vídeo. Detalhes logo abaixo.
INFORMAÇÕES SOBRE O VÍDEO:
Nome: Excel vba básico 24 - extrair número de texto - P2
Link: https://youtu.be/pxWdHqbbI6I
Duração: 09:00 min
Este vídeo e seus códigos também poderão ser vistos na página que trata de "Excel VBA básico B". Para encontrá-los, clique em "Home" e, em seguida, use o "Mapa do Blog".
