martes, junio 13, 2017

Cálculo de fecha de finalización de curso

Supongamos que programamos un curso de programación dividido en 10 encuentros/clases. Las clases se dictarán todos los lunes, miércoles y viernes. La pregunta es: ¿cuál es la fecha del último encuentro?

Podemos resolver este problema con facilidad usando la función DIA.LAB.INTL (Excel 2010 y versiones posteriores) pero tomando en cuenta un parámetro oscuramente explicado en la ayuda en línea de la función.


Empezamos por montar nuestro modelo


En las columnas D a H marcamos con el 0 (cero) los días en que se dictarán las clases y con 1 los días de la semana en los que no se dictarán las clases del curso. Ésto parece ir contra la intuición ya que, siendo usuarios consuetudinarios de Excel, asociamos el 0 con el valor FALSO y el 1 con el valor VERDADERO. Pero, como veremos más adelante, la función DIA.LAB.INTL requiere que usemos estos valores.
Como podemos ver, el curso de Programación comprende 10 encuentros (columna C) y se dicta los días Martes y Jueves.

Ahora agregaremos la columna con el cálculo de la fecha de cierre del curso


La fórmula en la celda J3 es =DIA.LAB.INTL(I3,C3-1,CONCAT(D3:H3)&"11")

Antes de seguir adelante aclaremos que la función CONCAT está disponible solamente para los usuarios de Excel 2016 (en Office 365). Usuarios de versiones aneriores deberán usar la función CONCATENAR.

Expliquemos la fórmula



El primer argumento es la fecha inicial; el segundo es el número de días que en nuestro caso es el número de encuentros. El tercer argumento es un valor textual compuesto de 1 y 0 que indican cuales son los días laborales de la semana y cuales no. Este valor textual debe tener siempre siete símbolos (uno por cada día siguiendo el orden de los días de la semana). 
El "truco" en esta fórmula es definir sólo los días en que se dicta el curso como días laborales. 

Opcionalmente podemos agregar una lista de feriados, el cuarto argumento, en caso de ser necesario.

También podemos cambiar el formato de las fechas para que muestren el día de la semana 


Otra mejora posible es usae Formato Numérico Personalizado para mostrar "si" en lugar de 0 y "no" en lugar de 1



con esta definición



o mejor aún con Formato Condicional


definido de esta manera


8 comentarios:

  1. Se podría invertir 1 y 0 en la tabla y poner como fórmula (matricial) 1-D3:H3 ?

    ResponderBorrar
  2. No como lo estás planteando. La función usa un texto (cadena de texto) compuesto de 1 y 0. La expresión no te crearía el texto requerido. Pero, como siempre, la mejor forma de aclararlo es probando :)

    ResponderBorrar
  3. Buenas tardes (desde España);
    ¿Podrias explicar lo de formato personalizado y "si";;"no"?. es que no lo "pillo"

    Gracias y un saludo

    ResponderBorrar
  4. Fijate en estos dos viejos posts

    http://jldexcelsp.blogspot.co.il/2006/05/formato-personalizado-de-nmeros-en-ms.html

    http://jldexcelsp.blogspot.co.il/2006/05/formato-personalizado-de-nmeros-en.html

    Tal vez publique un post actualizado (ya han pasado 11 años desde que publique los anteriores!!)

    ResponderBorrar
  5. Buenas tardes,

    En Excel 2013 ¿se puede concatenar un rango? es decir hacer esto =CONCATENAR(D3:H3); yo lo he intentado para eel ejemplo de este post y nada tuve que hacerlo así:
    =DIA.LAB.INTL(I3;(C3-1);CONCATENAR(D3;E3;F3;G3;H3;"11"))
    Es decir, concatenar celda por celda; no sé si habrá otra manera

    saludos

    ResponderBorrar
  6. Gracias Jorge, Dos cosas:
    1. he utilizado la formula que hay en el post que pones en el último comentario; pero me sale una problema, si hago como pones en el ejemplo del psot al que remites y pongo en columna (en cada celda)abcde...y en la fórmula, en el separador, pongo"", entonces solo me une abcd, es decir, la "e" no me la coge; para que me la cogiera tendría que poner una nueva celda con un caracter entonces me cogería "abcde", pero no la nueva celda.
    2.Como yo no lo puedo probar te pregunto: si me pasas tu libro de excel aplicando la fórmula CONCAT (para 2016), y lo abro en mi versión de 2013, ¿qué pasaría?, ¿daría error en la fórmula?

    Gracias

    ResponderBorrar
  7. Hola,

    1 - deja el separador en blanco;
    2 - la función no existe en las versiones anteriores a Excel 2016 por lo que al abrirlo en una versión anterior el valor calculado en la celda será transformado en texto.

    ResponderBorrar

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