Função VBA para Ins...
 
Notifications
Clear all

Função VBA para Inserir Caracteres CPF/ CNPJ

7 Posts
2 Usuários
0 Reactions
3,620 Visualizações
(@mmessias)
Posts: 44
Trusted Member
Topic starter
 

Prezados, bom dia!

Se possível, gostaria de uma ajuda dos senhores para o resolver um problema de excel que está me custando muito tempo.

A situação é a seguinte, importo dados do SAP de CPF e CNPJ de fornecedores para atualizar o banco de dados de uma outra planilha que utilizamos para criar cartas que serão enviadas ao banco para pagamento, o problema é que o sap importa apenas os numeros, sem a formatação com pontos e barras, e o banco não aceita assim.

Fica inviável criar formatos personalizados porque os formatos de cnpj são diferentes dos de cpf, e há cpf's com quantidades de caracteres diferentes uns dos outros, o que também implica na formatação. Também tive problemas com as formulas da outra planilha, que não conseguiam identificar aquele formato e retornavam erro, ou quando finalmente davam certo, retornavam apenas o número, sem pontuação. Como são muitos dados, é muito custoso fazer este processo manualmente.

O que gostaria de fazer, seria uma função de VBA que identificasse a quantidade de caracteres, e a partir disso, inserir os pontos, barras e traços no local correto.
Não possuo conhecimentos em vba, portanto, não estruturei nenhum código. Em todo caso, estou lhes encaminhando um exemplo da minha planilha para que os senhores tenham uma idéia de como é o resultado que preciso obter.

Desde já agradeço a atenção.

Atenciosamente,

 
Postado : 26/08/2013 6:55 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia!!

Use a pesquisa do fórum!!
viewtopic.php?f=21&t=3766
viewtopic.php?f=21&t=2407
viewtopic.php?f=20&t=6302
viewtopic.php?f=23&t=6170

Att

 
Postado : 26/08/2013 8:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Messias, os cnpj's e cpf's oriundo do SAP são em colunas separadas ?
Pois devido ao "reinicio" das numerações fica difícil identifica-los pela qtde de caracteres.
Se forem em colunas distintas (como em seu exemplo) pode utilizar a função Texto, Experimente:

Para o CNPJ=TEXTO(B4;"00.000.000/0000-00")
Para CPF = =TEXTO(D4;"000.000.000-00")

 
Postado : 26/08/2013 8:05 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Bom dia MMessias,

Vê se ajuda.

Qualquer coisa da o grito.
Abraço

 
Postado : 26/08/2013 8:08 am
(@mmessias)
Posts: 44
Trusted Member
Topic starter
 

Boa tarde Alexandre,
Obrigada pelas sugestões, no entanto ja havia pesquisado no forúm e estes tópicos realmente não me ajudam, apesar de serem muito úteis.

Reinaldo,
Sim, são em colunas distintas (graças à Deus). Mas quanto ao número de caracteres, o CNPJ sempre terá 14, e o CPF no máximo até 11.No final daria um pouco mais de trabalho, mas não seria impossível.

Reinaldo/ Bernardo.
Muito obrigada pela sugestão de vocês, no entanto, não me isenta de um trabalho bem longo e com grande margem de erro. Pois o que eu faço atualmente é:
Através da NÚM.CARACT, eu conto os caracteres de todos os cpf's, filtro, separo em colunas de acordo com a quantidade de caracteres (conforme planilha), aplico a fórmula que insere as pontuações, copio todos os dados, colo novamente como valores, depois faço um SE aninhado para voltar todos os cpf's para uma só coluna, e depois um outro SE aninhado, para colocar os cpf's na mesma coluna dos CNPJ's.
Eu necessito fazer isso em 5 bases de dados diferentes, que possuem, em média 50 mil linhas cada. Por vezes o excel tem parado de funcionar quando faço isso, por isso gostaria de uma função, do excel mesmo ou VBA, que me permita fazer isso em apenas uma coluna. Dai é só copiar e colar como valor, há alguma maneira de fazer uma função que aplique a formatação direto a partir do número de caracteres?

Eu tinha feito algo assim:

=SE(NÚM.CARACT(D4)=6;CONCATENAR(EXT.TEXTO(D4;1;1);".";EXT.TEXTO(D4;2;3);"-";EXT.TEXTO(D4;5;2));SE(NÚM.CARACT(D4)=7;CONCATENAR(EXT.TEXTO(D4;1;2);".";EXT.TEXTO(D4;3;3);"-";EXT.TEXTO(D4;6;2));SE(NÚM.CARACT(D4)=8;CONCATENAR(EXT.TEXTO(D4;1;3);".";EXT.TEXTO(D4;4;3);"-";EXT.TEXTO(D4;7;2)));SE(NÚM.CARACT(D4)=9;CONCATENAR(EXT.TEXTO(D4;1;1);".";EXT.TEXTO(D4;2;3);".";EXT.TEXTO(D4;5;3);"-";EXT.TEXTO(D4;8;2)));SE(NÚM.CARACT(D4)=10;CONCATENAR(EXT.TEXTO(D4;1;2);".";EXT.TEXTO(D4;3;3);".";EXT.TEXTO(D4;6;3);"-";EXT.TEXTO(D4;9;2)));SE(NÚM.CARACT(D4)=11;CONCATENAR(EXT.TEXTO(D4;1;3);".";EXT.TEXTO(D4;4;3);".";EXT.TEXTO(D4;7;3);"-";EXT.TEXTO(D4;10;2))))

Mas não funcionou...

Estava relendo o post, e percebi que realmente não expliquei direito o que queria. Peço desculpas.

Mais uma vez obrigada pela ajuda.

Atenciosamente.

 
Postado : 26/08/2013 10:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde MMessias,

Não sei se entendi muito bem, mas vê se ajuda.

Qualquer coisa da o grito.
Abraço

 
Postado : 26/08/2013 10:17 am
(@mmessias)
Posts: 44
Trusted Member
Topic starter
 

Bernardo,

Testei aqui, e aparentemente está funcionando. Muito obrigada!

Se não fosse pedir muito, poderia me explicar como esta função funciona?

 
Postado : 26/08/2013 11:07 am