Diagrama de GANTT con Ruta Crítica (CPM) 2/4
Calcula la ruta crítica de un proceso para poder graficar la información automáticamente
Continuamos con la construcción de un diagrama de Gantt con cálculo de la ruta crítica (CPM) en Excel. En la primera parte calculamos el early start, es decir, el momento más temprano en el que cada tarea puede empezar, apoyándonos en los predecesores (qué tareas deben completarse antes). En esta segunda entrega damos un paso previo imprescindible para poder calcular después los puntos de finalización: averiguar, para cada tarea, cuáles son sus tareas sucesoras. Para lograrlo combinamos varias funciones de Excel hasta obtener exactamente el resultado que necesitamos.
Qué queremos conseguir
La tabla con la que trabajamos ya incluye, para cada tarea, su lista de predecesores. Lo que nos falta es el camino inverso: saber qué tareas siguen a cada una.
- Si una tarea aparece como predecesora de otra, esa otra es su sucesora. Por ejemplo, si la tarea A es predecesora de B, entonces el sucesor de A es B.
- Una misma tarea puede tener varias sucesoras. Por ejemplo, si G figura como predecesora de dos tareas (H e I), sus sucesoras serán ambas.
Calcular esto de forma automática nos prepara el terreno para el siguiente vídeo, donde obtendremos el early finish y el late finish.
Paso 1: localizar la tarea con ENCONTRAR
La función ENCONTRAR puede devolver una matriz, igual que ocurría con CONTAR en la parte anterior. La idea es buscar la tarea actual dentro de la columna de predecesoras:
- Le indicamos el texto buscado (la tarea de ejemplo).
- Le indicamos dónde buscar (el rango de predecesoras).
El resultado es una matriz: donde encuentra la tarea devuelve un número (la posición), y donde no la encuentra devuelve un error.
Paso 2: convertir el resultado en ceros y unos
Como después vamos a usar FILTRAR, necesitamos una matriz limpia de verdadero/falso. Para ello preguntamos si el resultado anterior es un número:
- Hacemos referencia a la celda con la matriz usando la almohadilla (
#) para apuntar al rango derramado. - Si es un número, devuelve
VERDADERO; si no,FALSO.
Así obtenemos la matriz que servirá de criterio de filtrado.
Paso 3: filtrar las tareas relacionadas
Con esa matriz ya podemos usar FILTRAR. Tomamos la columna de actividades y aplicamos como criterio la matriz de verdadero/falso recién creada. El resultado es la lista de tareas que siguen a la seleccionada:
- Si elegimos una tarea con una sola sucesora,
FILTRARdevuelve esa tarea. - Si elegimos G, devuelve H e I, las dos tareas que la suceden.
Cambiando la tarea de referencia, el cálculo se actualiza automáticamente.
Paso 4: transponer el resultado
Como FILTRAR devuelve los resultados en columna, los pasamos a fila con TRANSPONER, que invierte la orientación de la matriz: lo que estaba en columnas pasa a estar en filas. De este modo las tareas sucesoras quedan en horizontal.
Paso 5: unir con & y dar formato
Para mostrar todas las sucesoras en una sola celda, concatenamos la fila transpuesta con el operador &. Así, en el caso de G, obtenemos H e I juntas.
Para que quede más legible podemos añadir un separador. La propia función FILTRAR admite añadir un espacio al final de los valores que devuelve, de modo que las tareas aparezcan separadas por espacios.
La fórmula completa
Una vez entendidos los cinco pasos por separado, los integramos en una sola fórmula que se aplica a todas las filas con una única referencia. El orden de operaciones dentro de esa fórmula es:
ENCONTRARla actividad dentro de las predecesoras.- Convertir ese resultado en número para usarlo como filtro.
FILTRARlas actividades con esa matriz.TRANSPONERel resultado.- Unir con
¶ mostrar las sucesoras de cada tarea.
El resultado: para cada fila, la lista de tareas que la suceden. Este dato es fundamental para lo que viene después.
Conclusión
Con este proceso paso a paso hemos resuelto cómo identificar las tareas sucesoras combinando ENCONTRAR, FILTRAR, TRANSPONER y el operador &. Ninguna función es especialmente difícil por sí sola; la dificultad está en encadenarlas correctamente. Por eso conviene seguir el desglose por partes: así podrás adaptarlo a tus propias necesidades. En el siguiente vídeo (3 de 4) usaremos esta columna de sucesoras para calcular el early finish y el late finish, los momentos en los que cada tarea puede terminar sin afectar al plazo global del proyecto.
Más contenido de Excel en InflueXcel
- Acumular el saldo en PIVOTARPOR: una función de agregación distinta por columna CasoNuevo caso que empieza con una suposicion razonable y acaba en una contraprueba del propio autor. Juan trae un libro mayor en bruto y quiere
- CONTAR.SI no acepta ELEGIRCOLS: por qué las funciones .SI exigen una referencia y no una matriz CasoHay errores de Excel que te mandan a buscar en la dirección equivocada, y este es de manual. Joan Recasens llega al grupo con una fórmula qu
- Dar formato a la última fila de una tabla que crece (y el techo del formato condicional) CasoUn miembro de la comunidad llega con una tabla cuyo rango real va de la columna embalaje a la columna total, y cuya columna de numeración co
- Colorear la fila entera según el técnico asignado: la referencia mixta que casi nadie aplica bien CasoEsta semana surgió una duda que parece de principiante y en realidad esconde el concepto peor entendido del formato condicional. Johann Frar
- Del VBA a una sola fórmula: calcular el RFC mexicano con LET, MAP y expresiones regulares CasoHector llega al grupo con un problema que no se ve todos los días: tiene resuelto el cálculo del RFC mexicano, pero lo tiene en VBA, y quier
- Un rango desbordado como serie de un gráfico: el nombre tiene que ser de ámbito Hoja CasoMiki llega al grupo con un caso de esos que no dan error, simplemente no funcionan. Quiere un gráfico que crezca solo: si mañana hay más dat
- Tabla de clasificación de una liga que se ordena sola: tres formas de montarla CasoDe madrugada, Hector lanzó al grupo una petición que suena sencilla y que acabó generando tres enfoques radicalmente distintos. Tiene un lib
- Conciliación contable: una sola fórmula por hoja que cuadra, descuadra y avisa CasoEsta semana alguien preguntó en el grupo si tenía sentido montarse un fichero para conciliaciones bancarias. La respuesta llegó en forma de
- Tres formas de obtener nombres de columnas específicas de una tabla CasoEsta semana surgió una duda sobre cómo devolver dinámicamente los nombres de columnas específicas de una tabla (por ejemplo, las columnas 1,
- Influcharla: tablas dinámicas, scan secuencial y datos agrupados TutorialJohn Vergara nos acompaña en esta fantástica sesión repasando algunos de los casos más interesantes vistos durante el mes