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 laborables son: lunes, martes, miércoles, jueves y viernes.

Situación:

Días de la semana en Excel VBA

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 de tipo Date, date2 de tipo Date, dateToCheck de tipo Date, daysEntre de tipo Integer, días de semana de tipo Integer ei de tipo Integer.

Dim date1 As Date, date2 As Date, dateToCheck As Date
Dim daysBetween As Integer, weekdays As Integer, i As Integer

2. Inicializamos cuatro variables. Usamos la función DateDiff para inicializar la variable daysBetween. Esta función tiene tres argumentos. Completamos "d" para el primer argumento ya que queremos el número de días entre fecha1 y fecha2.

weekdays = 0
date1 = Range("B2")
date2 = Range("B3")
daysBetween = DateDiff("d", date1, date2)

3. Necesitamos verificar para cada fecha entre date1 y date2 (incluyendo date1 y date2) 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 ciclo For Next.

For i = 0 To daysBetween

4. Usamos la función DateAdd para obtener cada fecha que necesitamos verificar. Esta función tiene tres argumentos. Completamos "d" para el primer argumento ya que queremos agregar días, i para el segundo argumento y date1 para el tercer argumento ya que queremos agregar i días hasta date1. De esta manera, Excel VBA puede verificar cada fecha entre date1 y date2 comenzando con date1. Agregue la siguiente línea de código:

dateToCheck = DateAdd("d", i, date1)

Ejemplo: para i = 3, Excel VBA verifica date1 + 3 días.

5. A continuación, usamos la función Weekday (función incorporada) para comprobar si dateToCheck es un día laborable o no. La función Día de la semana devuelve 1 para un domingo y 7 para un sábado. Por lo tanto, solo incrementamos la variable días de la semana si Weekday (dateToCheck) no es igual a 1 y no es igual a 7 (<> significa que no es igual a). Las siguientes líneas de código hacen el trabajo.

If (Weekday(dateToCheck) <> 1 And Weekday(dateToCheck) <> 7) Then
    weekdays = weekdays + 1
End If

6. No olvide cerrar el ciclo.

Next i

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 semana no es una cadena, funciona aquí.

MsgBox weekdays & " weekdays between these two dates"

8. Coloque su macro en un botón de comando y pruébelo.

Resultado:

Resultado de días laborables

4/8 Completado! Obtenga más información sobre fechas y horarios>
Siguiente capítulo: Eventos