Comparar fechas y horas en Excel VBA
Este ejemplo enseña cómo comparar las fechas y horas en Excel VBA. Las fechas y las horas se almacenan como números en Excel y cuentan el número de días desde el 0 de enero de 1900. Lo que se ve depende del formato de número.
-
Entre algunos números en la columna A.
-
Estos números son fechas. Esta es una manera perfecta para entrar en algunas fechas sin preocuparse por el formato de fecha. Cambiar el formato de fecha (Haga clic derecho en el encabezado de la columna A, Formato de celdas y elija Fecha).
Resultado:
Nota: Las fechas están en formato de Estados Unidos. Meses primeros, Días Segundo. Este tipo de formato depende de las ventanas de la configuración regional.
Coloque un botón de comando en la hoja de trabajo y añadir las líneas de código siguientes:
-
Declarar la variable i de tipo entero.
Dim i As Integer
-
Añadir un bucle For Next.
For i = 1 To 5 Next i
-
La función Fecha devuelve la fecha actual sin la hora. Agregue la siguiente línea de código para el bucle, para resaltar todas las células que contienen la fecha actual (03/13/2020).
If Cells(i, 1).Value = Date Then Cells(i, 1).Font.Color = vbRed
Resultado:
-
Añadir la siguiente línea de código para el bucle, para resaltar todas las fechas anteriores a 04/19/2019.
If Cells(i, 1).Value < DateValue("April 19, 2019") Then Cells(i, 1).Font.Color = vbRed
Resultado:
-
Pero ¿qué pasa con los tiempos, oímos que dice. Son los decimales. Cambie de nuevo a formato general y cambiar los números a números decimales.
-
Ahora cambiar el formato a formato ‘Hora y fecha’.
Resultado:
-
Si se desea resaltar todas las células que contienen la fecha actual, no se puede utilizar la línea de código a las 5 más. Por qué no? Debido a que los números de la columna A son números decimales ahora. Comparándola con la fecha (un número entero) no daría ningún partido. (Sólo se daría un partido con 13/03/2020 a medianoche exactamente!) La siguiente línea de código hace el trabajo:
If Int(Cells(i, 1).Value) = Date Then Cells(i, 1).Font.Color = vbRed
Explicación: simplemente usamos la función Int. La función Int redondea un número hacia abajo al entero más cercano. De esta manera podemos obtener las fechas sin los tiempos y comparar estas fechas con la fecha.
Resultado:
-
Agregue la línea siguiente código para resaltar todas las células que contienen los tiempos de la mañana.
If (Cells(i, 1).Value - Int(Cells(i, 1).Value)) < 0.5 Then Cells(i, 1).Font.Color = vbRed
Explicación: sólo necesitamos los decimales, por tanto, por lo restamos la parte entera. Noon (a medio camino a través del día) se representa como 0,5.
Decimales inferior a 0,5 son los tiempos de la mañana.
Resultado: