Bom dia a todos.
Estou com um problema que me bati para achar uma solução no VBA. Porém gostaria de saber se há alguma solução mais simples dentro do próprio VBA.
PROBLEMA
Todos os relatórios que extraio do SAP para o Excel, as datas são exibidas com "." ao invés de "/" (ex.: 09.04.2014). Os relatórios são muito grandes, 50 mil linhas aproximadamente.
SOLUÇÃO 01 – Erro
Criei uma macro para simplesmente substituir "." por "/" [Selection.Replace What:=".", Replacement:="/"], porém algumas datas ficam no formato mm/dd/aaaa e outras no formato dd/mm/aaaa. Neste caso, não consigo aplicar uma formatação de data americana para corrigir, pois cada data ficou em um padrão diferente.
Porém se eu substituir "." por "/" sem a Macro, com a função crtl+U manualmente, as datas ficam todas corretas e em um padrão. Mas eu preciso que seja feita a função na macro para automatizar todas as outras mudanças que preciso do relatório.
SOLUÇÃO 02 - Erro
Procurei outras alternativas de substituição para ver se as datas ficavam em um único padrão.
Consegui com a Função "SUBSTITUIR", então inseri uma coluna em branco ao lado da coluna de datas, inseri a função e fiz a macro repetir até a última célula.
Porém as células não foram reconhecidas como data, teria que pressionar F2 em todas elas para serem atualizadas e serem reconhecidas como data pelo excel. O relatório passa de 50 mil linhas, sendo inviável fazer manualmente.
SOLUÇÃO 03 – Erro
Para atualizar as células, eu poderia simplesmente substituir “/” pela própria “/”. Seu eu fizer manualmente, ela funciona. Mas se fizer essa substituição na MACRO [Selection.Replace What:=".", Replacement:="/"] não funciona, incrível!!!
SOLUÇÃO 04
Então coloquei uma macro para atualizar todas as células desta coluna. Ela basicamente faz o que seria apertarmos F2+Enter, para atualizar todas as células da coluna.
PERGUNTA
- Esta macro que utilizei, é a única solução? Existe alguma macro mais simples para eu substituir os caracteres, com exceção tradicional da “Selection.Replace What:=".", Replacement:="/"”?
A macro, apenas com esta parte de data para uma única coluna, ficou conforme abaixo.
Não sei exatamente utilizar as funções do VBA com “dim”, por isso visualizei vários tópicos e juntei macros que vi para fazer a macro abaixo. Ela funciona, porém é um pouco demorada, conforme a quantidade de linhas.
Anexo segue um modelo do relatório que eu tiro no SAP.
MACRO CRIADA
- Coluna “F” com as datas
- Inserir uma coluna em branco a direita da coluna “F”
- Aplicar a formula de substituir na coluna em branco (“G”) e aplicar até a última célula
- Colar valores para retirar as fórmulas e formatar como data
- Colar as novas datas na coluna “F”
- Atualizar todas as células da coluna “F” para que o excel reconheça os novos valores como data
Columns("G:G").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Dim Source1 As Worksheet
Dim Cell As Range
Set Source1 = Sheets("ZFI029")
For Each Cell In Source1.Columns("F").Cells.SpecialCells(xlCellTypeConstants)
Cell.Offset(0, 1).Select
ActiveCell.Value = "=SUBSTITUTE(RC[-1],""."",""/"")"
Next Cell
Columns("G:G").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.NumberFormat = "m/d/yyyy"
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Range("F1").Select
Dim lastRow As Long, X As Long, col As Long
col = Selection.Column
lastRow = Cells(Cells.Rows.Count, col).End(xlUp).Row
For X = 1 To lastRow
Cells(X, col).Select
mFormula = ActiveCell.FormulaLocal
ActiveCell.FormulaLocal = mFormula
Next
Postado : 09/04/2014 10:04 am