none
VBA Formato data mm/dd/aaaa para dd/mm/aaaa RRS feed

  • Pergunta

  • Estou tendo problemas com uma planilha, pois a data vem armazenada no formato "mm/dd/aaaa" e preciso converter para "dd/mm/aaaa".

    São várias datas, já tentei fazer uns programas em vba e também com fórmulas, mas não obtive sucesso. Pois, nunca consegue atender a todas as datas.

    Segue abaixo programação que utilizei

    Sub Change_DD_MM()
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each cell In Selection
        cell.Value = Mid(cell.Value, 4, 3) & Left(cell.Value, 2) & Right(cell.Value, 5)
        Next cell
        End Sub

    Nessa programação algumas datas são convertidas e outras não, talvez pelo modo que estão armazenadas.

    Caso seja possível posso passar a planilha para darem uma olhada, só me digam onde que eu faço um upload dela.

    terça-feira, 27 de maio de 2014 15:37

Respostas

  • Reparei que se atualizar a célula (F2 + enter) a célula fica no formato data, portanto tente adicionar o comando no código:

    Sub Change_DD_MM()
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each cell In Selection
        cell.Value = Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(cell.Value)
        SendKeys "{F2}"
        SendKeys "{ENTER}"
        Next cell
        End Sub

    Abraços!

    • Marcado como Resposta Frigeri93 quinta-feira, 29 de maio de 2014 13:23
    quinta-feira, 29 de maio de 2014 11:55

Todas as Respostas

  • Olá Frigeri!

    Tente usar as funções de data do VBA ao invés destas de textos que você usou:

    Sub Change_DD_MM()
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each cell In Selection
        cell.Value = day(cell.Value) & "/" & month(cell.Value) & "/" & year(cell.Value)
        Next cell
        End Sub

    Tenta ai e fala se deu.

    Abraços!

    • Sugerido como Resposta Rafael Kamimura terça-feira, 27 de maio de 2014 17:00
    terça-feira, 27 de maio de 2014 16:57
  • Experimente:

    cell.Value2 = Mid(cell.Value, 4, 3) & Left(cell.Value, 2) & Right(cell.Value, 5)


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    terça-feira, 27 de maio de 2014 23:24
    Moderador
  • Felipe, estava usando e não deu certo.

    quarta-feira, 28 de maio de 2014 16:29
  • Tentou a solução do Rafael?

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 29 de maio de 2014 02:08
    Moderador
  • Rafael,

    Eu essa função de data ela funciona aparentemente, mas o excel não interpreta como uma data.
    Por exemplo, no filtro ele não agrupa os meses do ano. Além disso, nem se usar a fórmula =texto(a2;"dd/mm/aaaa") agrupa os meses no filtro.

    quinta-feira, 29 de maio de 2014 11:31
  • Reparei que se atualizar a célula (F2 + enter) a célula fica no formato data, portanto tente adicionar o comando no código:

    Sub Change_DD_MM()
        Range("A2").Select
        Range(Selection, Selection.End(xlDown)).Select
        For Each cell In Selection
        cell.Value = Day(cell.Value) & "/" & Month(cell.Value) & "/" & Year(cell.Value)
        SendKeys "{F2}"
        SendKeys "{ENTER}"
        Next cell
        End Sub

    Abraços!

    • Marcado como Resposta Frigeri93 quinta-feira, 29 de maio de 2014 13:23
    quinta-feira, 29 de maio de 2014 11:55
  • Funcionou Rafael,

    No entanto, como minha planilha é muito grande com 15.574 linhas demora para executar a macro e ela para na linha 2.500.

    quinta-feira, 29 de maio de 2014 13:24
  • É melhor você disponibilizar sua pasta de trabalho com algumas linhas para sugerirmos uma solução.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    quinta-feira, 29 de maio de 2014 23:46
    Moderador
  • onde posso disponibilizar ela?

    sexta-feira, 30 de maio de 2014 02:13
  • Envie ao SendSpace.com, copie o link fornecido e poste o link aqui.

    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    sexta-feira, 30 de maio de 2014 02:40
    Moderador
  • Funcionou Rafael,

    No entanto, como minha planilha é muito grande com 15.574 linhas demora para executar a macro e ela para na linha 2.500.

    Frigeri, muito estranho parar na linha 2.500, você conferiu se há algum valor na célula A2500? Pois a macro vai selecionar todo intervalo da A2 para baixo até achar uma célula vazia. Se por acaso a célula A2500 estiver vazia a macro vai parar mesmo, agora se tem valor é preciso analisar melhor.

    E quanto a demora, você pode utilizar o comando Application.screenupdate = false no começo do código e Application.screenupdate = true no final, que vai dar uma diferença no tempo de execução, mas você não verá a macro rodando linha a linha.

    sexta-feira, 30 de maio de 2014 03:09
  • http://www.sendspace.com/file/m5667n
    quinta-feira, 5 de junho de 2014 03:50
  • Olá Frigeri!

    Analisei o seu arquivo e acho que você deve ter conferir para ter certeza se as datas realmente estão invertidas, pois eu fiz alguns testes no próprio Excel mudando a formatação de data e observei que parte dos dados são alterados e parte não, pois estão como textos. Então eu imagino dois cenários para estes seus dados:

    1º cenário) Por alguma razão somente parte dos valores foram convertidos para datas e você está com uma coluna mista com parte de dados com datas corretas e parte de dados com textos com dia e mês invertidos.

    2º cenário) Apesar de células estarem formatadas como data, na verdade todos os valores mostrados estão com dia e mês invertido.

    Independente do cenário, na minha opinião, é melhor você tratar estes dados diretamente no Excel, sem uso do VBA. Eu coloquei o link abaixo com a análise realizada e com uma opção de fórmula para cada cenário que descrevi. Se você tiver certeza de qual cenário é, é só copiar e colar como valor sobre a sua base.

    Link do arquivo

    Eu acho mais provável o segundo cenário mesmo, pois acredito que ao importar essa base, o excel entendeu como data todos registros cujo formato americano de data permite interpretação no nosso formato de data (dias menores ou igual a 12).

    Abraços!


    quinta-feira, 5 de junho de 2014 17:21