Digitação automática de zeros Excel VBA

PMT - Cálculo do valor da parcela e Amortização
PMT – Cálculo do valor da parcela e Amortização
31 de julho de 2011
Planilhando
Planilhando
31 de julho de 2011

Objetivo: Demonstrar a utilização de códigos VBA para inserir dados automaticamente no Excel, por exemplo, zeros á esquerda ou retirar a vírgula de um número decimal e formatar com zeros á esquerda.

Esta digitação automática de dados no Excel pode ser muito útil para cadastro de dados faltantes em arquivos texto formatados por exemplo.

Na planilha exemplo foram criados dois campos, um para digitação da loja, aonde pode ser digitado apenas o número 1, e os zeros á esquerda são inseridos automaticamente, e outro para digitar um valor formatado, digitando um valor decimal, separado por vírgula, que será transformado em um número formatado com zeros á esquerda e sem a vírgula.

Abaixo o código fonte utilizado na planilha com os devidos comentários

'O evento Worksheet_Change é disparado quando há uma alteração em qualquer dado da planilha
Private Sub Worksheet_Change(ByVal Target As Range)
    'Este comando envia para o comando Sair: ao final desta sub a execução do processo
    'Evitando desta forma que a verificação dos eventos
    'continue desativada caso ocorra algum erro.
    On Error GoTo Sair

    'Desabilita a escuta de eventos para que não entre em loop ao alterar a célula
    Application.EnableEvents = False

    'Em Target.Row identifica se é a linha é maior ou igual a segunda linha
    'Em Target.Column identifica se a coluna é a correta a ser formatada
    If Target.Row >= 2 And Target.Column = 1 Then
        'A função CStr converte qualquer valor em texto
        'A função Len conta o número de caracteres de uma cadeia de caracteres
        'A função String repete um determinado número X vezes,
        'no caso 3 menos o número de caracteres digitados
        'O + nesta função realiza a concatenção dos zeros e do valor digitado
        Target.Value = CStr(String(3 - Len(Target.Value), "0")) + CStr(Target.Value)
    End If

    'Neste bloco de código é realizada a mesma verificação,
    'apenas com tratamento diferente dos dados
    If Target.Row >= 2 And Target.Column = 2 Then
        'Multiplica o valor por 100 para excluir a vírgula
        Target.Value = Target.Value * 100
        'Formata o valor com 15 digitos no total.
        Target.Value = CStr(String(15 - Len(Target.Value), "0")) + CStr(Target.Value)
    End If

Sair:
    Application.EnableEvents = True
End Sub

Abraço

Marcos Rieper

2 Comments

  1. André disse:

    Parabéns pelo trabalho! visito sempre seu site… Aproveitando, gostaria de indicar o site http://www.iAulas.com.br lá você vai encontrar mais de 10 mil apostilas para download gratuito dos mais variados assuntos, inclusive são dezenas de apostilas sobre Excel… espero ter ajudado…

  2. NEWTON disse:

    Sou totalmente leigo e bem iniciante em programação, então primeiramente agradeço a paciência nas explicações.

    Tenho que converter uma planilha simples em arquivo TXT com delimitador do tipo “pipeline”.

    Com o código que repasso abaixo consegui realizar parte da necessidade, porém, necessito que os números estejam preenchidos com zero à esquerda… alguém pode me ajudar?

    Como exemplo, coloco a tabela abaixo: (o título das colunas começam na segunda linha da planilha)

    COD EVENTO HORAS VALOR
    01234 213 00348 000000531
    00265 008 00003 000000091
    00326 213 00303 000000426
    00349 214 00000 000017016
    00292 213 00424 000000614
    00298 214 00000 000012758
    e o arquivo TXT deverá ficar com o seguinte formato:

    01234|213|00348|000000531
    00265|008|00003|000000091

    O problema é que quando exporto, sai da seguinte forma:

    1234|213|348|531
    265|208|3|91

    Ou seja, os “Zeros” da esquerda desaparecem.

    Como deve colocar no Código VBA para resolver esse problema?

    Segue abaixo o script que estou usando:

    Sub Macro1()
    ‘Determina o tamanho da planilha (considerando que a coluna “A” esta preenchida.
    UltLin = Cells(Cells.Rows.Count, “A”).End(xlUp).Row

    ‘Abre o arquivo Saida
    Open “C:\FOLHA.txt” For Output As #1

    ‘ Executa um loop da linha 3 até a ultima linha de dados

    For i = 3 To UltLin
    ‘ Monta a linha
    LinExp = Left(Cells(i, 1), 5)
    LinExp = LinExp & “|” & Left(Cells(i, 3), 3)
    LinExp = LinExp & “|” & Left(Cells(i, 4), 5)
    LinExp = LinExp & “|” & Left(Cells(i, 5), 10)

    ‘ Grava a linha no arquivo
    Print #1, LinExp

    Next i

    ‘Fecha o arquivo
    Close #1

    End Sub

    Agradeço toda ajuda e atenção.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.