none
EXCEL-VBA: Alteração de Data RRS feed

  • Pergunta

  • Boa a tarde a todos,

     

    Estou com o seguinte problema... preciso de uma macro que faça a seguinte alteração em relatórios que importo.

    O formato que ele vem importado é assim:

     

    22.09.2007

     

    Preciso deixá-lo em formato de data:

     

    22/09/2007

     

    Como faço???

     

    Obrigado pela ajuda!

    segunda-feira, 21 de janeiro de 2008 17:11

Respostas

  •  Kodig wrote:

    Na trave!!!!  Preciso que ela fique em formato Data e não texto, pois preciso classifica-lás.... o problema de formatação de data continua, ou seja, ainda fica mm/dd/yyyy....

     

    Obrigadão pela Ajuda.....

     

    []'sss

     

    Fiz algumas alterações no código que devem solucionar o teu problema

    Code Block

    Sub Ajustar_Data()
    Dim Célula As Range
        For Each Célula In Selection.Cells
            With Célula
            .Value = DateValue(CDate(Replace(Célula, ".", "/")))
            .NumberFormat = "dd/mm/yy"
            End With
        Next Célula
    End Sub

     

    Usei nos meus teste, a série de datas abaixo e todos os valores se comportaram conforme esperado.

     

    1.2.7
    01.02.07
    1.2.2007
    01.02.2007
    2.1.07
    02.1.07
    02.01.07
    2.01.07

     

    Se o problema da formatação "mm/dd/yy" continuar, peço que dê uma olhada nas configurações regionais do teu micro, por que não estou conseguindo reproduzir o problema na minha máquina.

    terça-feira, 22 de janeiro de 2008 13:07

Todas as Respostas

  • Segue o código abaixo com os comentários inseridos acima dos comandos.

    Acredito que vc queira modificar dados ao longo de uma coluna, por isso a existência do loop.

     

    Code Block

    Sub Ajustar_Data()
     Dim i As Integer, N As Integer, Coluna As Integer
     'Determinação da coluna a ser transformada
     Coluna = 1

     'Contagem do número de linhas preenchidas
     N = Application.WorksheetFunction.CountA(Columns(Coluna))

     'Loop para percorrer todas as células preenchidas da coluna
       For i = 1 To N
        'Tratamento de erro caso o valor da célula não possa
        'ser convertido para data
        On Error Resume Next

        'Substituição de "." por "/" e transformação do resultado
        'em data
        Cells(i, Coluna) = DateValue(Replace(Cells(i, Coluna), ".", "/"))

        Next i
    End Sub

     

     

    []s

    terça-feira, 22 de janeiro de 2008 09:21
  • Estamos quase lá....

     

    Primeiro preciso que sejam células selecionadas ou pelo menos a coluna selecionada e não sempre a coluna 1....

     

    e quando é transformado algumas vezes a data ele fica mm/dd/yyyy (sabe porque?) e preciso dd/mm/yyyy.

     

    Mas já tenho um caminho.... mto obrigado!

    Se puder me ajudar!!!

     

    []'s

    terça-feira, 22 de janeiro de 2008 10:25
  •  Kodig wrote:

    Estamos quase lá....

     

    Primeiro preciso que sejam células selecionadas ou pelo menos a coluna selecionada e não sempre a coluna 1....

     

    e quando é transformado algumas vezes a data ele fica mm/dd/yyyy (sabe porque?) e preciso dd/mm/yyyy.

     

    Mas já tenho um caminho.... mto obrigado!

    Se puder me ajudar!!!

     

    []'s

     

    Então vamos aos ajustes:

    Code Block
    Sub Ajustar_Data()
    For Each Célula In Selection.Cells
    Célula.Value = CDate(Replace(Célula, ".", "/"))
    Next Célula
    End Sub

     

     

    Forma de utilização:

    1. Selecione o intervalo de células a serem substituídas

    2. Execute a macro

     

    OBS: O comando CDate é utilizado para garantir a compatibilidade com o sistema de datas do teu computador. Para o VBA o que vale é o sistema americano mm/dd/yy, por isso ocorrem confusões durante a transformação

     

    Acredito que resolve o teu problema.

     

    []s

     


    terça-feira, 22 de janeiro de 2008 11:54
  • Na trave!!!!  Preciso que ela fique em formato Data e não texto, pois preciso classifica-lás.... o problema de formatação de data continua, ou seja, ainda fica mm/dd/yyyy....

     

    Obrigadão pela Ajuda.....

     

    []'sss

     

    terça-feira, 22 de janeiro de 2008 12:15
  •  Kodig wrote:

    Na trave!!!!  Preciso que ela fique em formato Data e não texto, pois preciso classifica-lás.... o problema de formatação de data continua, ou seja, ainda fica mm/dd/yyyy....

     

    Obrigadão pela Ajuda.....

     

    []'sss

     

    Fiz algumas alterações no código que devem solucionar o teu problema

    Code Block

    Sub Ajustar_Data()
    Dim Célula As Range
        For Each Célula In Selection.Cells
            With Célula
            .Value = DateValue(CDate(Replace(Célula, ".", "/")))
            .NumberFormat = "dd/mm/yy"
            End With
        Next Célula
    End Sub

     

    Usei nos meus teste, a série de datas abaixo e todos os valores se comportaram conforme esperado.

     

    1.2.7
    01.02.07
    1.2.2007
    01.02.2007
    2.1.07
    02.1.07
    02.01.07
    2.01.07

     

    Se o problema da formatação "mm/dd/yy" continuar, peço que dê uma olhada nas configurações regionais do teu micro, por que não estou conseguindo reproduzir o problema na minha máquina.

    terça-feira, 22 de janeiro de 2008 13:07
  • AGORA SIM!!!!!!!

     

    Funcionou perfeitamente....

     

    Muito obrigado... e parabéns!!

     

    Vc é fera....

     

     

    terça-feira, 22 de janeiro de 2008 13:11
  • Um aobservação:

     

    É possível fazer a operação em duas passagens sem utilizar código VBA.

    1. Utlizar a fórmula =VALOR(SUBSTITUIR(A1;".";"/")) para cada uma das células com datas no formato "dd.mm.yy"

    2. Copiar as fórmulas e colar como valores no intervalo original das datas.

     

    []s
    terça-feira, 22 de janeiro de 2008 13:12
  • Caro Adilson,

     

    Descobri o problema....

     

    Esta planilha que estou tentando fazer esta alteração vem exportada do SAP, através de um Excel em Inglês...

    Abro meu Excel em Português e quando tento rodar este script, continua ficando as datas mm/dd/yyyy.

     

    Será que correlação entre estes fatos?

    Será que ao salvar uma planilha em um uma versão em ingles do excel ele registra o formato das datas?

    Será que há como resolver este problema?

     

    Acho que agora me fu... ops me dei mal...

     

    Muito obrigado msmo por tua ajuda!!!

     

     

    P.S.: Quando digito uma data semelhante (01.11.2009) em uma planilha nova e rodo o script ele funciona!!!

    terça-feira, 22 de janeiro de 2008 13:28
  •  Kodig wrote:

    Caro Adilson,

     

    Descobri o problema....

     

    Esta planilha que estou tentando fazer esta alteração vem exportada do SAP, através de um Excel em Inglês...

    Abro meu Excel em Português e quando tento rodar este script, continua ficando as datas mm/dd/yyyy.

     

    Será que correlação entre estes fatos?

    Será que ao salvar uma planilha em um uma versão em ingles do excel ele registra o formato das datas?

    Será que há como resolver este problema?

     

    Acho que agora me fu... ops me dei mal...

     

    Muito obrigado msmo por tua ajuda!!!

     

     

    P.S.: Quando digito uma data semelhante (01.11.2009) em uma planilha nova e rodo o script ele funciona!!!

     

    Concordo contigo sobre a origem do problema. Já vi este tipo de problema de compatibilidade ocorrendo com arquivos produzidos a partir de exportação.

    Um teste que vc pode fazer é veriricar na lista de formato de números personalizados aparece o formato "mm/dd/yy".

    Uma possibilidade é sempre copiar e colar como valores os dados do arquivo numa pasta de trabalho em brnaco em salvá-la de acordo com as configurações do teu Excel e estação de trabalho.

    Se quiser (e puder) me envia um destes arquivos exportados para que eu possa ver quais devem ser as alterações necessárias para fazer o código funcionar corretamente.

    []

    terça-feira, 22 de janeiro de 2008 15:18
  •  Adilson Soledade wrote:

     

     

    Concordo contigo sobre a origem do problema. Já vi este tipo de problema de compatibilidade ocorrendo com arquivos produzidos a partir de exportação.

    Um teste que vc pode fazer é veriricar na lista de formato de números personalizados aparece o formato "mm/dd/yy".

    Uma possibilidade é sempre copiar e colar como valores os dados do arquivo numa pasta de trabalho em brnaco em salvá-la de acordo com as configurações do teu Excel e estação de trabalho.

    Se quiser (e puder) me envia um destes arquivos exportados para que eu possa ver quais devem ser as alterações necessárias para fazer o código funcionar corretamente.

    []

     

    Consegui resolve o problema caro Adilson;

     

    Adicionei novamente a esta linha:

    .NumberFormat = "dd/mm/yyyy"

     

    acima de:

    .Value = DateValue(CDate(Replace(Célula, ".", "/")))

     

    ficando assim:

    .NumberFormat = "dd/mm/yyyy"

    .Value = DateValue(CDate(Replace(Célula, ".", "/")))

    .NumberFormat = "dd/mm/yyyy"

     

    Desta maneira funciona sem problemas!!!

     

    Agora para finalizar preciso fazer com que onde não haja caracter ou  tipo compativel não faça nada.... pois se seleciono uma célula vazia ou de caracter ele dá uma mensagem de erro...

    Ou pelo menos tratar este erro, para não exibir a opção de depurar.

    Aí sim finalizo o script e posso passar para o pessoal aki... para seu conhecimento:

    Este script faz parte de um bem maior onde cria uma barra com várias opções de formatação e esta é uma das formatações dela... onde dele gerei um suplemento que será instalado em outras máquinas para facilitar o tratamento destes relatórios exportados!!

     

     

    Mais uma vez obrigado!!

     

    quarta-feira, 23 de janeiro de 2008 12:04
  • Boa sacada realizar a formatação antes de depois!

    Segue abaixo o código com a tua modificação, mais uma intercepção de erro (On Error Resume Next). Desta forma a macro ignora o erro e continua a execução, deixando intactas as células que não podem ser convertidas para data.

    Code Snippet

    Sub Ajustar_Data()
    Dim Célula As Range
        For Each Célula In Selection.Cells
            With Célula
                On Error Resume Next
                .NumberFormat = "dd/mm/yy"
                .Value = DateValue(CDate(Replace(Célula, ".", "/")))
                .NumberFormat = "dd/mm/yy"
            End With
        Next Célula
    End Sub

     

     

    Fiz uma série de testes com diferentes valores (números, texto, boleanos, funções) e rodou 100&.

    Acredito que resolve a tua questão.

    []s

     

    quarta-feira, 23 de janeiro de 2008 13:29