6 febrero, 2025

TRABAJAR CON FECHAS PARA RECONSTRUIR HISTÓRICOS

Hola a todos!.

Después de varios días sin publicar en la web, por fin tengo un poco de tiempo para escribir un breve post.

Muchas de las consultas que me envían las suelo resolver muy rápido cuando no son demasiado complejas o cuando son para resolver una parte específica de una rutina o una función. Hoy quiero publicar una de esas consultas, que aunque es sencilla y puede resultar obvia, hay que tener en cuenta que muchos lectores están empezando con Excel tanto en fórmulas como en macros, y siempre está bien detenerse en este tipo de ejercicios.

En este caso, un lector me enviaba una serie de fechas de un histórico pero que solo las fechas de inicio y me preguntaba la forma de obtener automáticamente la fecha final del periodo, esta es la información de partida:

TRABAJAR CON FECHAS PARA RECONSTRUIR HISTORICOS

Pues bien, este trabajo lo podemos hacer de una manera sencilla con una fórmula:

=SI(A2=A3;FECHA(AÑO(B3);MES(B3);DIA(B3)-1);"")

O incluso más sencillo todavía:

=SI(A2=A3;B3-1;"")

Y obtenemos el siguiente resultado:

TRABAJAR CON FECHAS PARA RECONSTRUIR HISTORICOS1

Como podéis ver, obtenemos la fecha fin y cuando llegamos a la última fecha del ID lo dejamos en blanco dado que la fecha debe quedar abierta.

La razón de utilizar la función fecha en la fórmula es para mostrar cómo podemos traducir esta función en lenguaje VBA. Es decir, en VBA no podemos usar directamente la función DATE dado que no permite introducir los argumentos de año, mes y día. Para poder trasladar la función fecha a VBA debemos usar DateSerial, aquí os dejo la macro:

Sub FECHAS()
'Declaramos variables
Dim i As Integer, Fin As Integer
Dim fecha As Date
'Trabajamos en la hoja2
With Sheets("Hoja2")
Fin = Application.CountA(.Range("A:A"))
'calculamos la fecha de cierre del registro actual
For i = 2 To Fin
fecha = .Cells(i + 1, 2)
If .Cells(i, 1) = .Cells(i + 1, 1) Then
.Cells(i, 3) = DateSerial(Year(fecha), Month(fecha), Day(fecha) - 1)
Else
.Cells(i, 3) = ""
End If
Next i
End With

End Sub

De esta forma podemos introducir las funciones Year, Month y Day con la variable «fecha». Una vez ejecutada la macro, este es el resultado:

TRABAJAR CON FECHAS PARA RECONSTRUIR HISTORICOS2

Aunque a nivel VBA es una rutina sencilla, seguro que en algún momento os puede resultar útil, ya sea el uso de DateSerial o de la propia función fecha().

Aunque no lo comenté al principio, en este ejemplo es obvio que antes de aplicar la fórmula o ejecutar la macro, si los datos están desordenados, debemos ordenar primero por fecha y luego por ID.

Descarga el archivo de ejemplo pulsando en: TRABAJAR CON FECHAS PARA RECONSTRUIR HISTÓRICOS

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies