Notifications
Clear all

Converter números em texto com VBA

6 Posts
3 Usuários
0 Reactions
1,873 Visualizações
(@r_andrade)
Posts: 0
New Member
Topic starter
 

Prezados,

Há alguns meses fiz meu cadastro no fórum mas não consigo lembrar a senha. Ao utilizar a opção 'Esqueci minha senha' o sistema informa que foi enviado o e-mail para redefinição da mesma, mas não estou recebendo o tal e-mail. Para poder continuar usando essa ótima ferramenta acabei fazendo um novo cadastro.

Vamos ao que interessa:

Pesquisei na base de dados do fórum e não encontrei nada sobre o assunto.

Preciso de uma macro para converter alguns dados que estão como número em texto. Atualmente faço essa tarefa manualmente várias vezes por dia e estou realmente cansado disso! :roll:
Por esse motivo gostaria que fosse uma solução em VBA.

Elaborei uma versão bem reduzida para demonstrar o que preciso (em anexo).
Acho que olhando diretamente no Excel fica mais fácil entender, até porque coloquei uma explicação mais detalhada no próprio arquivo.

Desde já, agradeço!

Obrigado! :D

 
Postado : 29/11/2014 7:22 pm
(@gtsalikis)
Posts: 2373
Noble Member
 

VC pode usar a ferramenta texto para colunas que está no menu dados.

Com isso vc mesmo pode converter tudo para texto, sem segredo.

(Selecione todos os dados que deseja converter, entre na ferramenta texto para colunas e mande converter para texto, dê OK.)

Inclusive, se quiser, pode gravar uma macro para converter números para texto.

Outra opção seria usar uma fórmula PROCV que entenda numeros como texto, digamos, se a tua fórmula for assim:

=PROCV(A14;A2:B20;2;0)

Ela ficaria assim:

=PROCV(TEXTO(A14;"@");A2:B20;2;0)

 
Postado : 29/11/2014 8:59 pm
(@rlm)
Posts: 0
New Member
 

Além das ótimas dicas do Gilmar, segue uma rotina que talvez auxilie.

Sub toTexto()
Dim x As Long
For x = 2 To Sheets("Original").Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Sheets("Original").Cells(x, 1) = "'" & Sheets("Original").Cells(x, 1)
    If Len(Sheets("Original").Cells(x, 3)) = 1 Then
        Sheets("Original").Cells(x, 3) = "'0" & Sheets("Original").Cells(x, 3)
    Else
        Sheets("Original").Cells(x, 3) = "'" & Sheets("Original").Cells(x, 3)
    End If
Next
End Sub
 
Postado : 30/11/2014 7:48 am
(@r_andrade)
Posts: 0
New Member
Topic starter
 

Caro Gilmar,

Suas dicas foram ótimas. Eu não sabia que com o recurso 'Texto para colunas' era possível transformar os dados numéricos em texto. E também não sabia que era possível utilizar o argumento 'valor_procurado' da fórmula PROCV da forma que você recomendou.

=PROCV(TEXTO(A14;"@");A2:B20;2;0)

Obrigado pela ajuda e pela aula!
_____________________________________
Caro Reinaldo,

O que eu procurava era exatamente o que você desenvolveu! Eu não sabia que ao inserir o apóstrofo os números seriam interpretados como texto e esse caractere seria ignorado pelo Excel.

Antes de concluir o tópico, você poderia me dar mais uma ajuda?
Não tenho muita experiência com o VBA, mas consegui adaptar o código que você forneceu para atender minha necessidade e funcionou muito bem.
Só gostaria que você avaliasse a estrutura do código e desse sua opinião: fiz a coisa certa? Ou teria uma forma mais enxuta de se montar o mesmo código?
Observação - lembrando que o nome da minha planilha oficial é 'CADPROD' e as colunas que devem ter dois dígitos são: P, S, Y e AB.

Sub toTexto()
    Dim x As Long
    
    For x = 2 To Sheets("CADPROD").Cells(Cells.Rows.Count, "A").End(xlUp).Row
        
        Sheets("CADPROD").Cells(x, 1) = "'" & Sheets("CADPROD").Cells(x, 1)
        
        If Len(Sheets("CADPROD").Cells(x, 16)) = 1 Then
            Sheets("CADPROD").Cells(x, 16) = "'0" & Sheets("CADPROD").Cells(x, 16)
        Else
            Sheets("CADPROD").Cells(x, 16) = "'" & Sheets("CADPROD").Cells(x, 16)
        End If
    
        If Len(Sheets("CADPROD").Cells(x, 19)) = 1 Then
            Sheets("CADPROD").Cells(x, 19) = "'0" & Sheets("CADPROD").Cells(x, 19)
        Else
            Sheets("CADPROD").Cells(x, 19) = "'" & Sheets("CADPROD").Cells(x, 19)
        End If
    
        If Len(Sheets("CADPROD").Cells(x, 25)) = 1 Then
            Sheets("CADPROD").Cells(x, 25) = "'0" & Sheets("CADPROD").Cells(x, 25)
        Else
            Sheets("CADPROD").Cells(x, 25) = "'" & Sheets("CADPROD").Cells(x, 25)
        End If
    
        If Len(Sheets("CADPROD").Cells(x, 28)) = 1 Then
            Sheets("CADPROD").Cells(x, 28) = "'0" & Sheets("CADPROD").Cells(x, 28)
        Else
            Sheets("CADPROD").Cells(x, 28) = "'" & Sheets("CADPROD").Cells(x, 28)
        End If
    Next
End Sub

Muito obrigado!

 
Postado : 30/11/2014 5:01 pm
(@rlm)
Posts: 0
New Member
 

Experimente assim:

Sub toTexto()
Dim x As Long
For x = 2 To Sheets("CADPROD").Cells(Cells.Rows.Count, "A").End(xlUp).Row
    Sheets("CADPROD").Cells(x, 1) = "'" & Sheets("CADPROD").Cells(x, 1)
    Sheets("CADPROD").Cells(x, 16) = "'" & Format(Sheets("CADPROD").Cells(x, 16), "00")
    Sheets("CADPROD").Cells(x, 19) = "'" & Format(Sheets("CADPROD").Cells(x, 19), "00")
    Sheets("CADPROD").Cells(x, 25) = "'" & Format(Sheets("CADPROD").Cells(x, 25), "00")
    Sheets("CADPROD").Cells(x, 28) = "'" & Format(Sheets("CADPROD").Cells(x, 28), "00")
Next
End Sub
 
Postado : 01/12/2014 8:02 am
(@r_andrade)
Posts: 0
New Member
Topic starter
 

Caro Reinaldo,

Com a adaptação feita a partir do seu primeiro código o meu problema já estava resolvido. Mas eu não estava satisfeito com a minha "gambiarra". :D
O segundo código ficou simplesmente perfeito!
Acho que em programação, no nosso caso VBA, é fundamental buscar soluções mais concisas e ordenadas.
Agradeço seu empenho e a boa vontade de compartilhar o conhecimento.

Muito obrigado!

 
Postado : 01/12/2014 3:46 pm