jueves, septiembre 05, 2013

Calcular el primer día hábil del mes con Excel

Esta nota viene a colación de una consulta sobre cómo poner en una fila (o columna) de una hoja de Excel todos los días hábiles de un mes.

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.

8 comentarios:

  1. Hola Jorge,
    Gracias por todos los tutoriales y trucos que haces, me sirven mucho.
    Me gustaría preguntarte una cosa aparte:
    He leído que el Excel 2013 iba a traer la posibilidad de hacer también gráficos de Infogram, web que me gusta bastante. Existe realmente esa posibilidad? Se necesita complemento? O solo fueron rumores?
    Gracias

    ResponderBorrar
  2. Me alegro que el blog te resulte útil. Infogr.am lanzó una aplicación para crear gráficos interactivos con Excel.
    Por otro lado, en esta nota de Miguel sobre PowerPivot puedes ver un "botón de muestra" de lo que se puede hacer con Excel 2013.

    ResponderBorrar
  3. Que quieres que te diga genial! Ayuda demasiado los tips como siempre, realmente muchas gracias!

    ResponderBorrar
  4. gracias por la ayuda, no hubiera conseguido facilemnte el resultado.

    Pero hay un error con las "," , tendría que cambiarse por un par de ";".

    =SI(MES(DIA.LAB(FIN.MES(fechaActual;-1);FILA()-10))=mesActual;DIA.LAB(FIN.MES(fechaActual;-1);FILA()-10);"")

    Gracias!!!!!

    ResponderBorrar
  5. Hola Fco Javier,
    me alegro que el blog te resulte útil. En cuanto a los separadores de argumentos en las funciones, y como se ha explicado en este blog más de una vez, no se trata de error sino de definiciones regionales del Windows. En algunos países se usa la coma y en otros el punto y coma. Similarmente a lo que sucede con los separadores de miles y decimales (en algunos países se usa la coma para los miles y en otros el punto).

    ResponderBorrar
  6. Saludos. Como haría para que los días salgan Horizontal y no verticalmente. Gracias por la ayuda.

    ResponderBorrar
  7. En lugar de usar FILA()-5 en la fórmula tienes que usar, suponiendo que empezamos en la celda C6, COLUMNA()-2. La fórmula sería

    =SI(MES(DIA.LAB(FIN.MES(Fecha_actual,-1),COLUMNA()-2))=Mesactual,DIA.LAB(FIN.MES(Fecha_actual,-1),COLUMNA()-2),"")

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.