La idea de mi lector era crear una hoja que al activar la hoja, las fechas hábiles aparezcan en un rango determinado.
Excel cuenta con varias funciones para calcular fechas tomando en cuenta feriados: para calcular fechas, DIA.LAB, DIA.LAB.INTL ; para lapsos, DIAS.LAB, DIAS.LAB.INTL.
Para calcular el primer día hábil del mes combinamos las funciones DIA.LAB y FIN.MES de la siguiente manera
En la celda C2 ponemos el número de mes, en la celda C3 el año; en la celda C5 la fórmula
=DIA.LAB(FIN.MES(FECHA(C3,C2,1),-1),1)
Hace el cálculo de esta manera
FIN.MES calcula el último día del mes de la FECHA, tantos meses atrás o adelante como indique el segundo argumento de la función. En nuestro caso "'-1" indica un mes atrás, es decir 31/08/2013.
DIA.LAB calcula el día laboral antes o después de la fecha indicada, según el segundo argumento de la función. En nuestro caso "1" significa el primer día laboral después del 31/08/2013.
Si queremos poner todos los días hábiles del mes corriente en un rango de la hoja hacemos lo siguiente:
- En la celda C1 ponemos la función HOY() y le asignamos el nombre definido "fechaActual" (o cualquier otro que les plazca).
- El mes y el año lo obtenemos en las celdas C2 y C3 con las funciones =MES y =AÑO. A la celda C2 le asignamos el nombre definido "mesActual".
- En la celda C6 ponemos esta fórmula y la copiamos 30 filas abajo (dado que el número máximo de días de un mes es 31)
=SI(MES(DIA.LAB(FIN.MES(fechaActual,-1),FILA()-5))=mesActual,DIA.LAB(FIN.MES(fechaActual,-1),FILA()-5),"")
La condición de la función SI evalúa si la fecha cae dentro del mes definido ("mesActual"), en caso positivo calcula la fecha del día hábil usando como numerador la expresión FILA()-5 (-5 porque empezamos en la fila 6; en caso de comenzar en otra fila hay que modificar la fórmula).
Si la condición no se cumple, la celda no muestra ningún valor.
Si queremos mostrar las fechas en una fila, usamos como numerador el expresión COLUMNA()-x. Por ejemplo, si la primer fecha aparece en la columna D, la fórmula será
=SI(MES(DIA.LAB(FIN.MES(fechaActual,-1),COLUMNA()-3))=mesActual,DIA.LAB(FIN.MES(fechaActual,-1),COLUMNA()-3),"")
Una acotación para el final: DIA.LAB tiene un tercer argumento opcional que permite usar una rango para señalar los días festivos, además de los fines de semana.