Por el amor de dios, ¿Porqué excel no deja de darme vuelta las fechas?

Hice de todo, usé variables dipo date, uso las funciones day(), Month() y Year() para capturar los valores por separado y pegarlos, pero el excel hace lo que se le antoja.
Por ejemplo, una función que selecciona una celda y termina con:
Selection = Dia & "/" & Mes & "/" & Año

La primera vez que la ejecuto me carga bien los datos, pero si vuelvo a ejecutarla me da vuelta los valores, siendo exactamente los mismos valores. Únicamente me mantiene la fecha correctamente si es que el día es superior a 12, de lo contrario, nunca sé como me va a guardar una fecha, si me la guarda como 02/05/2017 o 05/02/2017.
Ya no se que hacer, ya no se como solucionarlo, incluso e dado vuelta los valores y responde de la misma forma, una vez los carga bien y dsp me da vuelta las fechas... (Selection = Mes & "/" & Dia & "/" & Año).

Ya no se que mas hacer, ¿tendré qué trabajar con números enteros?. 42736 = 01/01/2017

2 Respuestas

Respuesta
1

Hace un tiempo tuve ese mismo problema, para solucionarlo antes de la línea que inserta los datos en la celda. Le di formato de texto,

Ejemplo

cells(1, fila).NumberFormat = "@"

Respuesta
1

.30.01.17

Hola, César

Sí, pasa todo el tiempo, porque hay una MS Excel puede interpretar una fecha como dia/mes/año o mes/dia/año excepto cuando el valor supera el 12 que sólo puede ser un dia (no un mes).

Entonces, si supieras que las fechas a convertir estuvieren siempre invertidas, la siguiente fórmula traduciría esa fecha al formato latinoamericano.

=FECHA(AÑO(B1);DIA(B1);MES(B1))

Pero, lo sé, no siempre es posible.

Por eso, te paso una rutina para cuando, a priori, no se puede saber si la fecha está invertida o no:

Sub CorrFecha()
MesAnA = 5 ' Sirve para ayudar a determinar qué mes debe considerar
'  
            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
            Set LaCelda = Nothing
End Sub

Espero que te haya sido de ayuda.

Un abrazo

Fernando

(Buenos Aires, Argentina)

.

.

. ----- Te quedó pendiente valorizar el tiempo que te dediqué ----

Buenas, César

Si hubieses tenido la oportunidad de probar la solución, espero que haya ayudado a resolver tu problema.

Si así fuera, agradeceré un comentario y que la valorices para finalizarla.
(Acordate de que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)

Caso contrario, preguntame de nuevo.

Saludos

Fer

.

¡Gracias!
Te pido mil disculpas, no conozco todas las políticas ni reglas del foro.
Te voy a ser sincero, dejé de renegar e hice mis propias funciones que convierten desde fechas en formato dd/mm/aaaa a un número entero y viceversa, sabiendo que 01/01/2000 = 36526. 

Para cuando ví tu respuesta, ya había creado las funciones y las había probado. Tienen en cuenta incluso la primer regla de los años bisiestos, ya que es interrumpida por la segunda en el año 2100 y no creo que mi planilla se siga usando hasta fines de siglo jaja, así que no tenía sentido agregarle mayor complejidad, por ende mis 2 funciones traducen con exactitud de entero a fecha y viceversa, cualquier fecha comprendida entre 01/01/2000 hasta 28/02/2100.
Siempre que voy a guardar los datos los convierto a enteros, opero con enteros, y únicamente los convierto a fecha cuando hay que mostrar la fecha en pantalla al usuario, sino, trabajo siempre con enteros.

Te vuelvo a pedir disculpas, te agradezco tu tiempo, y espero que ésto no te desanime a seguir ayudándonos a todos. Un abrazo y suerte!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas