A continuación veremos un programa en Excel VBA que calcula el número de días de la semana entre dos fechas.
Los días de semana son: Lunes, martes, miércoles, jueves y viernes.
Situación:
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.
1. Primero, declaramos cinco variables. date1 of type Date, date2 of type Date, dateToCheck of type Date, daysBetween of type Integer, weekdays of type Integer and i of type Integer.
Dim date1 As Date, date2 As Fecha, fecha para comprobar como fecha Días oscurosEntre como un entero, días de la semana como un entero, i como un entero
2. Inicializamos cuatro variables. Usamos la función DateDiff para inicializar la variable daysBetween. Esta función tiene tres argumentos. Rellenamos «d» para el primer argumento ya que queremos el número de días entre la fecha1 y la fecha2.
días de la semana = 0 fecha1 = Rango(«B2») date2 = Rango («B3») daysBetween = DateDiff(«d», date1, date2)
3. Tenemos que comprobar para cada fecha entre la fecha1 y la fecha2 (incluyendo la fecha1 y la fecha2) si la fecha es un día de la semana o no. Si es así, incrementamos los días de la semana en 1. Usaremos un bucle de «For Next».
Para i = 0 A días Entre
4. Usamos la función DateAdd para obtener cada fecha que necesitamos comprobar. Esta función tiene tres argumentos. Rellenamos «d» para el primer argumento ya que queremos añadir días, i para el segundo argumento, y date1 para el tercero ya que queremos añadir i días a date1. De esta forma el Excel VBA puede comprobar cada fecha entre la fecha1 y la fecha2 empezando por la fecha1. Añade la siguiente línea de código:
dateToCheck = DateAdd(«d», i, date1)
Ejemplo: para i = 3, el Excel VBA comprueba la fecha1 + 3 días.
5. A continuación, utilizamos la función de día de la semana (función incorporada) para comprobar si dateToCheck es un día de la semana o no. La función de día de la semana devuelve 1 para un domingo y 7 para un sábado. Por lo tanto, sólo incrementamos los días de la semana variables si Weekday(dateToCheck) no es igual a 1 y no es igual a 7 (<> significa no igual a). Las siguientes líneas de código hacen el trabajo.
Si (Weekday(dateToCheck) <> 1 y Weekday(dateToCheck) <> 7) Entonces días de la semana = días de la semana + 1 Finalizar si
6. No te olvides de cerrar el bucle.
Siguiente…
7. Finalmente, mostramos el número de días de la semana usando un MsgBox. Usamos el operador & para concatenar (unir) dos cadenas. Aunque los días de la semana no es una cadena, funciona aquí.
MsgBox weekdays & «días laborables entre estas dos fechas»
8. Ponga su macro en un botón de comando y pruébela.
Resultado: