Macro que busca texto y reemplaza por fecha

Una aplicación me exporta a excel las fechas en formato dd. Mm. Aaa excel no las reconoce y las trata como texto.
La solución es fácil con un buscar y reemplazar y cambio el punto por una /
El problema es que al crear una macro que me lo haga no funciona, por ejemplo una fecha 12.01.2007 queda como 01/12/2007 intercambia el día por el mes, supongo que es problema de idioma.
El código VBA es:
Sub ArreglaFecha()
Cells.Replace What:=".", Replacement:="/", LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
End Sub

1 Respuesta

Respuesta
1
Dependiendo de como quisieras resolverlo te diría una forma u otra, pero si el problema en sí es convertir 12.01.2007 en 12/01/07 y que excel lo reconozca como fecha, bastaría usar fórmulas de excel en una columna y luego cortar y pegar solo valores en la columna que tengas las fechas tipo 12.01.07... en un columna escribes = fecha(extrae(a1;7;4);extrae(a1;4;2);extrae(a1;1;2), esa es una solución sencilla,... si tienes alguna duda consulta la ayuda de la función fecha porque tengo el excel en ingles y no sé si la función en castellano respeta ese orden o primero hay que poner el día, luego mes y año... eso no es problema... si quisieras hacer una macro con un bucle pues habría que tener en cuenta si el volcado de datos lo haces una sola vez o bien el rango de datos se va ampliando con sucesivos volcados, etc..., por eso sólo te pongo la equivalencia en VBA de como hacer lo mismo para una fecha tipo 12.01.2007 en la celda a1 escribiendo el resultado en a2
Range("a2") = DateSerial(Mid(Range("a1"), 7, 4), Mid(Range("a1"), 4, 2), Mid(Range("a1"), 1, 2))
Seguro q hay otras maneras de hacerlo probando con convertir datos con cdate, concatenando "/" una vez hallado día, mes y año,... pero pienso q la solución q te he propuesto ya está bien.
Salut.
Obviamente comprueba que tu ordenador tiene en "panel del control"-"configuración regional y y idiomas"(más o menos) configurado el formato fecha en el formato que tu deseas.
Salut.
Me parece la solución más fácil, visto que con la macro de reemplazar es imposible.
He probado tu código y va perfecto, le he añadido un par de modificaciones para controlar si me viene con un dígito el día o el mes o con solo 2 dígitos el año.
Al final me ha quedado muy largo pero funciona, ahora la puliré, me haré un bucle para el resto o un array con la currentregion y listo
DateSerial(IIf(Len(Mid(Range("A1"), InStr(4, Range("A1"), ".") + 1, Len(Range("A1")) - InStr(4, Range("A1"), "."))) < 4, Mid(Range("A1"), InStr(4, Range("A1"), ".") + 1, Len(Range("A1")) - InStr(4, Range("A1"), ".")) + 2000, Mid(Range("a1"), InStr(4, Range("A1"), ".") + 1, Len(Range("A1")) - InStr(4, Range("A1"), "."))), Mid(Range("A1"), InStr(1, Range("A1"), ".") + 1, InStr(4, Range("A1"), ".") - InStr(1, Range("A1"), ".") - 1), Mid(Range("A1"), 1, InStr(1, Range("A1"), ".") - 1))
Gracias por hacerme mirar para otro lado, estaba ofuscado con lo del formato de fecha.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas