Calcular los viernes que hay entre dos fechas con Vba

Nos encontramos con la necesidad de calcular el número de viernes que hay entre dos fechas.

Pedimos la Fecha inicial

inputbox date ini

Pedimos la Fecha final

inputbox date end

Debe devolver un mensaje con el resultado

msgboxviernes

Con una sencilla macro podemos calcularlo, a continuación revisamos el código paso a paso, recuerda que los comentarios al código comienzan por ‘ y aparecen en color verde.

————————————————————————————————————————————————————–

En un primer paso forzamos a la declaración de variables

Option Explicit

Sub viernes()

‘Definición de variables a utilizar en el ejemplo

   Dim Vdayinit As Date ‘Fecha de inicio

   Dim Vdayend As Date ‘Fecha de fin

   Dim Vdayinitmsg As Date ‘Variable creada para el Msgbox porque Vdayinit va incrementando un día en el Loop

   Dim Vdifday As Integer ‘Diferencia de días entre fecha inicio y fecha fin

   Dim Vdayweek As Integer ‘Día de la semana de obtenido con la función

   Dim Vconta As Integer ‘Variable contador para ir sumando los días que son viernes

   Dim i As Integer ‘Variable para el Loop for .. I

 

On Error GoTo Controlerror ‘En caso de error al escribir los datos ir a Controlerror y salir de la macro

 

‘Pedimos con un InputoBox que el usuario escriba las fechas de Inicio y Fin y las almacenamos en las variables declaradas

Vdayinit = InputBox(“Escribe fecha en formato dd/mm/aa”, “FECHA INICIO”)

   Vdayinitmsg = Vdayinit  ‘Almacenamos la fecha inicial que usaremos en el mensaje del final

Vdayend = InputBox(“Escribe fecha en formato dd/mm/aa”, “FECHA FIN”)

‘Calculamos los días entre la dos fechas para repetir el Loop tantas veces como días haya entre ellas.

   Vdifday = Vdayend – Vdayinit

 ‘Ahora hacemos un Loop si ponemos por ejemplo 01/01/2015 y 31/01/2015 habran transcurrido 30 días , luego el Loop se repetirá 30 veces

For i = 1 To Vdifday

‘Averiguamos el día de cada fecha con la función Weekday

   Vdayweek = Weekday(Vdayinit, vbMonday)

‘Si el día es = 6 (viernes) sexto día de la semana, contamos 1, al estar dentro del Loop en cada vuelta evaluará la nueva fecha e irá sumando

   If Vdayweek = 6 Then  

     Vconta = Vconta + 1

   End If

‘Una vez evaluado añadimos un día más en la siguiente vuelta, que vuelve a comprobar si es viernes y lo añade a Vconta

   Vdayinit = Vdayinit + 1

Next

‘Cuando el Loop ha finalizado las vueltas, ya tenemos la variable Vconta con los días que son viernes

‘Ahora sólo tenemos que crear un mensaje MsgBox con la información obtenida, el texto va entre comillas, Chr(13) para añadir un salto de línea, y las variables con la información del mensaje que necesitamos.

MsgBox “El número de viernes entre las las fechas :” & Chr(13) & Vdayinitmsg & ” y ” & Vdayend & Chr(13) & “es de ” & Vconta

Controlerror: Exit Sub

 End Sub

————————————————————————————————————————————————————-

Puedes copiar en el editor de Excel el código para comprobar el funcionamiento de la macro, recuerda que una buena forma de comprobarlo es ejecutando el código paso a paso, puedes repasar cómo hacerlo en el Post anterior : https://exceltrucos.com/2015/03/23/depurar-codigo-vba-en-excel-ejecutar-una-macro-paso-a-paso/

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s