Este ejemplo le enseña cómo comparar fechas y horas en Excel VBA . Las fechas y las horas se almacenan como números en el Excel y cuentan el número de días desde el 0 de enero de 1900. Lo que se ve depende del formato de los números.
1. Introduce algunos números en la columna A.
2. Estos números son fechas. Es una forma perfecta de introducir algunas fechas sin preocuparse por el formato de la fecha. Cambie el formato a Fecha (Haga clic con el botón derecho del ratón en el encabezado de la columna A, Formato de celdas y elija Fecha).
Resultado:
Nota: Las fechas están en formato de EE.UU. Meses primero, días segundo. Este tipo de formato depende de la configuración regional de Windows.
Coloca un botón de comando en tu hoja de trabajo y añade las siguientes líneas de código:
3. Declare la variable i de tipo Entero.
Dim i As Integer
4. Añade un bucle de For Next.
Para i = 1 a 5 Siguiente…
5. La función Fecha devuelve la fecha actual sin la hora. Añade la siguiente línea de código al bucle, para resaltar todas las celdas que contienen la fecha actual (3/13/2020).
Si Celdas(i, 1).Valor = Fecha Entonces Celdas(i, 1).Fuente.Color = vbRed
Resultado:
6. Añade la siguiente línea de código al bucle, para resaltar todas las fechas anteriores al 19/04/2019.
Si Cells(i, 1).Value < DateValue(«19 de abril de 2019») Entonces Cells(i, 1).Font.Color = vbRed
Resultado:
7. Pero qué hay de los tiempos, te oímos decir. Son los decimales. Vuelve al formato general y cambia los números a números decimales.
8. Ahora cambia el formato a «Fecha y hora».
Resultado:
9. Si quiere resaltar todas las celdas que contienen la fecha actual, no podemos usar más la línea de código en el 5. ¿Por qué no? Porque los números de la columna A son ahora números decimales. Compararlo con la fecha (un número entero) no daría ninguna coincidencia. (¡Daría solamente un fósforo con 3/13/2020 en la medianoche exactamente!) La línea de código siguiente trabaja:
Si Int(Celdas(i, 1).Valor) = Fecha Entonces Celdas(i, 1).Fuente.Color = vbRed
Explicación: simplemente usamos la función Int. La función Int redondea un número al entero más cercano. De esta manera podemos obtener las fechas sin las horas y compararlas con la fecha.
Resultado:
10. Añade la siguiente línea de código para resaltar todas las celdas que contengan horas de la mañana.
Si (Celdas(i, 1).Valor – Int(Celdas(i, 1).Valor)) < 0.5 Entonces Celdas(i, 1).Fuente.Color = vbRed
Explicación: sólo necesitamos los decimales, por lo que restamos la parte entera. El mediodía (a mitad del día) se representa como 0,5. Los decimales inferiores a 0,5 son las horas de la mañana.
Resultado: