.
Buenas, Marcelo
Suele pasar esto. El problema se plantea porque 12/9/16 es una fecha posible en cualquiera de los dos sistemas, mientras que 19/9/16 sólo puede ser dd/mm/aa porque, claramente, no hay un mes 19.
Cuando MS Excel encuentra una fecha "imposible", la ingresa como texto. Si no, deja un número que representa los días transcurridos entre el 01/01/1900 y tal fecha. Hoy, por ejemplo, es el dia 42677.
Lo notarás si le quitás el formato a las celdas de las fechas. Las que no son fechas pareceran fechas, mientras la que sí son quedarán como un numero de cinco cifras.
Al margen de esto, armé esta rutina que analiza fecha por fecha y decide si modificarla o no.
Sub CorrFecha()
'---- Variables modificables ----
'=== MARCELO, modificá estos datos de acuerdo a tu proyecto:
'
CeldaMes = "B2" 'celda de referencia de mes actual
CeldaIniFech = "G4" 'primera celda con fechas a corregir
'---- fin Variables
'
Range(CeldaIniFech).Select
MesAnA = IIf(IsDate(Range(CeldaMes).Value), Range(CeldaMes).Value)
Do While Not IsEmpty(ActiveCell)
Set LaCelda = ActiveCell
LaCelda.ClearFormats
LaFecha = LaCelda.Value
If IsNumeric(LaFecha) Then
If Month(LaFecha) <> MesAnA Then
LaFecha = CDate(Month(LaFecha) & "-" & Day(LaFecha) & "-" & Year(LaFecha))
Colorin = 38
End If
Else
LaFecha = CDate(Mid(LaFecha, 1, 2) & "-" & Mid(LaFecha, 4, 2) & "-" & Right(LaFecha, 2))
Colorin = 37
End If
LaCelda.Value = LaFecha
LaCelda.NumberFormat = "dd-mmm-yy"
LaCelda.Interior.ColorIndex = Colorin
LaCelda.Offset(1).Select
Loop
Application.StatusBar = False
Set LaCelda = Nothing
End Sub
Al principio del código hay dos variables que necesita la macro para funcionar:
Donde empiezan las fechas a revisar y un mes de referencia para decidir en los casos dudosos.
Probalo y decime si te ayuda.
Un abrazo
Fer
.