Usuário com melhor resposta
EXCEL-VBA: Alteração de Data

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!
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 BlockSub 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 SubUsei 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.
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 BlockSub 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
-
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
-
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 BlockSub Ajustar_Data()
For Each Célula In Selection.Cells
Célula.Value = CDate(Replace(Célula, ".", "/"))
Next Célula
End SubForma 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
-
-
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 BlockSub 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 SubUsei 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.
-
-
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.
-
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!!!
-
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.
[]
-
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!!
-
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 SnippetSub 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 SubFiz 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