lunes, febrero 15, 2010

Diagramas Gantt dinámicos en Excel

En los albores de este blog publiqué una nota sobre cómo construir un diagrama Gantt con Excel. Mostramos allí dos posibilidades: usando formato condicional o usando gráficos.

En esta nota mostraremos como construir un diagrama de Gantt dinámico que nos permite mostrar en pantalla tareas que se extienden por períodos muy largos.

Cuando construimos el diagrama de Gantt en Excel con formato condicional, usamos una fila para cada tarea y una celda para cada unidad de tiempo. El modelo general consiste en usar la primer columna para definir las tareas, la segunda para la fecha de iniciación, la tercera para la duración, la cuarta para la fecha de finalización y a partir de la quinta columna usamos cada celda para representar una unidad de tiempo. Este es un ejemplo clásico



Las barras de color del diagrama las logramos usando estas fórmulas de formato condicional:



para las filas pares =Y($C3=F$2,$E3=F$2,RESIDUO(FILA(),2)=0)

para las filas impares =Y($C3=F$2,$E3;=F$2,RESIDUO(FILA(),2)=1)

Para construir la escala del tiempo (en la fila 2) ponemos en la celda F2 esta fórmula

=MIN(C3:C6)+7

que calcula la primer fecha más una semana de la primer tarea a realizar. En la celda G2 ponemos "=F2+7" y así sucesivamente.

Si observamos atentamente veremos que si bien la primer tarea concluye el 15/02/10, el diagrama parece indicar que lo hace el 12/02/10. Esto se debe a que usamos una resolución semanal para mostrar las tareas.
Podemos solucionar este problema usando una resolución diaria. En total necesitamos 90 días (la última fecha es el 26/03/10).

Si bien esto resuelve el problema, nos crea uno nuevo, el diagrama excede los límites de la pantalla



La solución ideal es, por lo tanto, trabajar con una resolución diaria pero que no exceda el ancho de la pantalla.

Empezamos por insertar algunas filas por encima de nuestro diagrama.



En la celda E3 calculamos la primer fecha del proyecto usando la función MIN. En la celda F5 creamos una referencia a la celda E3; en la celda G5 ponemos "=F5+1" y así sucesivamente para crear la escala de tiempo.

En la celda F6 creamos una referencia a la celda F5, seleccionamos el rango que comprende la semana (F6:L6) y aplicamos "combinar y centrar"


Cambiamos el ancho de las columnas de la selección a 0.6, quitamos los bordes interiores y obtenemos este resultado


Nótese que la fecha 01/01/10 parece ocupar una columna pero en realidad comprende 7 columnas, una para cada día de la semana.

Volvemos a aplicar esta técnica a cada grupo de siete columnas hasta obtener este resultado


Hemos mejorado en buena medida nuestro diagrama, pero aún nos queda una cuestión por solucionar.

Nuestro diagrama cubre ahora 13 semanas, con resolución diaria. Pero, ¿que pasa si una tarea se extienda por más de de 90 días del inicio del proyecto?
Esto lo solucionaremos creando un diagrama Gantt dinámico con fórmulas sencillas y una barra de desplazamiento de la barra de formularios.

Introducimos estos cambios en nuestro modelo:

1 – insertamos una columna a la izquierda de la hoja (la tabla del diagrama empieza ahora en la columna C).

2 – en la celda G3 ponemos la fórmula "=MIN(D5:D8)+A2"; el papel a cumplir por la celda A2 será explicado enseguida


3 –reemplazamos la fórmula en la celda G4 por una referencia a la celda G3

4 – en la pestaña Programador abrimos la etiqueta Insertar e insertamos una barra de desplazamiento


5 – definimos los parámetros de la barra de desplazamiento en la pestaña "control" del menú "formato de control"


Nótese que vinculamos el control con la celda A2. Esto hará que cuando movemos el cursor de la barra, la fecha en la celda G3 se va incrementando y así el resto de las celdas.

Para ejemplificarlo cambiamos la cantidad de días en la duración y podemos ver como al desplazar el cursor de la barra, se van modificando las fechas y actualizando el diagrama




El archivo puede descargarse aquí 
.

5 comentarios:

  1. Sr Dulkenman

    Estoy en deuda con Ud. por la rapidez y certeza con que aclara nuestras dudas. Su blog es lo mejor que existe en la web sobre excel, en el cual Ud. demuestra que es un verdadero experto.


    Gracias y suerte

    Jesus

    ResponderBorrar
  2. Acabo de descargar el archivo y tengo una duda. Es posible incluir diferentes colores en la misma fila?
    El objetivo es señalar que la tarea ha superado en x días la fecha prevista de finalización.
    Un cordial saludo.
    José Manuel

    ResponderBorrar
  3. José Manuel,
    si, es posible definiendo más de una regla para el formato condicional.
    Estoy preparando un modelo "profesional" donde se puede agregar el porcentaje cumplido de la tarea. Al hacerlo la parte proporcional de la barra cambia de color.
    En el caso de tu consulta creo que sería más apropiado crear una columna al lado de "Fin" que muestre una alarma cuando se supera la fecha de finalización, por ejemplo poniendo los días ranscurridos desde la fecha prevista y poniendo un fondo rojo a la celda.

    ResponderBorrar
  4. Hola Jorge

    Vos pusiste así:

    "" =Y($C3=F$2,$E3=F$2,RESIDUO(FILA(),2)=0)""
    Porque no poner así:

    "" =Y($C6<=F$4;$E6>=F$4;RESIDUO(FILA();2)=0)""

    No se en otro excel pero en el 2007 con poner

    =Y($C6<=F$4;$E6>=F$4) es suficiente porque puedo seguir poner otros formatos condicionales con otros colores.

    A mi me anduvo.

    Saludos

    Amadeo

    ResponderBorrar
  5. También se puede poner así pero de hecho es lo mismo. En lugar de "igual a" ponés "menor o igual a" y al haber un único valor en la celda de referencia el resutado es el mismo. La condición con RESIDUO es indispensable para distinguir filas pares de impares. Podés prescindir de esta condición, pero entonces teneés que definir una regla para las pares y otra para las impares (duplicar el trabajo).

    ResponderBorrar

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