Cree hojas de día de un mes sin fines de semana y días festivos usando VBA

Tabla de contenido

En este artículo, crearemos una macro para crear una hoja para cada día de la semana para el mes especificado del año especificado excluyendo todas las fechas especificadas en la lista de vacaciones.

Antes de ejecutar la macro, se requieren tres entradas. Necesitamos especificar el número de mes en la celda J10, el año en la celda J11 y especificar la lista de fechas de vacaciones en el rango B16: B26.

Después de especificar los valores de entrada, haga clic en el botón enviar para ejecutar la macro.

Esta macro insertará una nueva hoja para cada día de la semana para el mes especificado excluyendo las fechas especificadas en la lista de días festivos.

Explicación lógica

En esta macro, hemos utilizado la función DateSerial para encontrar la última fecha del mes especificado. Hemos utilizado FOR Loop para recorrer desde la fecha de inicio del mes hasta la última fecha del mes. Hemos usado la función Buscar para encontrar si la fecha que se está usando existe en la lista de días festivos especificada.

La función de día de la semana se usa junto con la instrucción If para verificar si una fecha es un día de la semana o un fin de semana. El estado de cuenta insertará una nueva hoja solo si la fecha es un día de la semana y no existe en la lista de días festivos. Como se puede ver en la captura de pantalla anterior, hoja para 6th Diciembre no se crea, como 6th Diciembre está presente en la lista de vacaciones.

Siga a continuación para obtener el código

 Option Explicit Sub MonthApply () 'Declarando variables Dim DVariable As Date Dim RngFind As Range Dim MonthNo, YearNo As Integer Dim StartDate, EndDate As Date' Deshabilitando las actualizaciones de pantalla Application.ScreenUpdating = False With Worksheets ("Main") 'Obteniendo mes y año de la celda J10 y J11 de la hoja "Principal" MonthNo = .Range ("J10"). Valor YearNo = .Range ("J11"). Valor 'Derivando la fecha de inicio y finalización StartDate = DateSerial (YearNo, MonthNo, 1) EndDate = DateSerial (YearNo, MonthNo + 1, 0) 'Recorrer todas las fechas en el mes especificado Para DVariable = StartDate To EndDate' Encontrar si la fecha está marcada como feriado Establecer RngFind = .Range ("B16: B26"). Buscar ( DVariable) 'Verificando si la fecha es feriado, fin de semana o día de la semana Si RngFind no es nada y día de la semana (DVariable, 2) <6 Luego' Insertar nueva hoja después de la última hoja de trabajo en el libro de trabajo Worksheets.Add after: = Worksheets (Worksheets.Count) ' Cambiar el nombre de la hoja activa ActiveSheet.Name = Formato (Variable DV, "dd.mm.yy") Finalizar si siguiente Variable DV. Seleccione Finalizar W ith Application.ScreenUpdating = True End Sub 

Si te gustó este blog, compártelo con tus amigos en Facebook. Además, puede seguirnos en Twitter y Facebook.

Nos encantaría saber de usted, háganos saber cómo podemos mejorar nuestro trabajo y hacerlo mejor para usted. Escríbanos al sitio de correo electrónico

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave