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:
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:
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:
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.
¡¡Muchas gracias!!