Usuário com melhor resposta
VBA Formato data mm/dd/aaaa para dd/mm/aaaa

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 SubNessa 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.
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
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
-
-
-
-
-
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
-
-
-
-
-
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.
- Editado Rafael Kamimura sexta-feira, 30 de maio de 2014 03:11
-
-
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.
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!
- Editado Rafael Kamimura quinta-feira, 5 de junho de 2014 17:26