El último día hábil (Microsoft Excel)
Al desarrollar una hoja de trabajo, es posible que necesite saber el último día hábil de un mes determinado. Suponiendo que sus días hábiles corren de lunes a viernes, la siguiente fórmula devolverá la fecha deseada:
=DATE(YEAR(A1),MONTH(A1)+1,0)-(MAX(0,WEEKDAY (DATE(YEAR(A1),MONTH(A1)+1,0),2)-5))
Esta fórmula devuelve una fecha que es solo de lunes a viernes y siempre el último día del mes representado por la fecha en A1. Para algunos propósitos, es posible que necesite saber cuál es el último viernes de un mes determinado. Esto se determina fácilmente con esta fórmula:
=DATE(YEAR(A1),MONTH(A1)+1,0)-WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))+(WEEKDAY(DATE (YEAR(A1),MONTH(A1)+1,0))>5)*7-1
Esta fórmula calcula el último día del mes para la fecha en la celda A1 y, según el día de la semana que es esa fecha, resta el número apropiado de días para devolver el viernes anterior.
Si desea tener en cuenta las vacaciones de negocios, la complejidad de la fórmula aumenta bastante rápidamente. Por eso, es mejor crear una función definida por el usuario (una macro) que determinará el último día hábil y compensará los días festivos.
La siguiente macro devuelve una fecha, de lunes a viernes, que representa el último día hábil. La fecha se compara con una lista de días festivos (HolidayList), que debe ser un rango con nombre en su libro de trabajo. Si se determina que la fecha es un día festivo, el día hábil final se reduce hasta que se encuentra un día adecuado.
Function LastWorkDay(lRawDate As Long, _ Optional rHolidayList As Range, _ Optional bFriday As Boolean = False) As Long LastWorkDay = DateSerial(Year(lRawDate), _ Month(lRawDate) + 1, 0) - 0 If bFriday Then LastWorkDay = MakeItFriday(LastWorkDay) Else LastWorkDay = NoWeekends(LastWorkDay) End If If Not rHolidayList Is Nothing Then Do Until myMatch(LastWorkDay, rHolidayList) = 0 LastWorkDay = LastWorkDay - 1 If bFriday Then LastWorkDay = MakeItFriday(LastWorkDay) Else LastWorkDay = NoWeekends(LastWorkDay) End If Loop End If End Function
Private Function myMatch(vValue, rng As Range) As Long myMatch = 0 On Error Resume Next myMatch = Application.WorksheetFunction _ .Match(vValue, rng, 0) On Error GoTo 0 End Function
Private Function NoWeekends(lLastDay As Long) As Long NoWeekends = lLastDay If Weekday(lLastDay) = vbSunday Then _ NoWeekends = NoWeekends - 2 If Weekday(lLastDay) = vbSaturday Then _ NoWeekends = NoWeekends - 1 End Function
Private Function MakeItFriday(lLastDay As Long) As Long MakeItFriday = lLastDay While Weekday(MakeItFriday) <> vbFriday MakeItFriday = MakeItFriday - 1 Wend End Function
Tenga en cuenta que hay tres funciones privadas que están incluidas. Estas funciones se llaman desde la función principal de LastWorkDay. El primero, myMatch, es un «contenedor» del método Match normal. Este uso se incluye debido al manejo de errores requerido.
La segunda función, NoWeekdends, se utiliza para retroceder una fecha hasta el viernes anterior si resulta que es sábado o domingo. La función MakeItFriday se utiliza para garantizar que una fecha siempre sea viernes.
Para usar esta función definida por el usuario de su hoja de trabajo, úsela en una fórmula, como esta:
=LastWorkDay(A1, HolidayList, TRUE)
El primer parámetro (A1) es la fecha a evaluar. El segundo parámetro (HolidayList) es una lista opcional de fechas de vacaciones. Como se muestra aquí, se supone que HolidayList es un rango con nombre en la hoja de trabajo.
Si se proporciona este parámetro, la función se asegura de que cualquier fecha que devuelva no esté en la lista de fechas en HolidayList.
El parámetro final también es opcional; puede ser VERDADERO o FALSO.
(El valor predeterminado, si no se especifica, es FALSE). Si este parámetro se establece en TRUE, la función siempre devuelve el último viernes del mes. Si este parámetro es TRUE y se proporciona HolidayList, la función devuelve el último viernes no festivo del mes.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (10085) se aplica a Microsoft Excel 2007 y 2010. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:
link: / excel-The_Last_Business_Day [El último día hábil]
.