Diagrama de GANTT con Ruta Crítica (CPM) 1/4
Calcula la ruta crítica de un proceso para poder graficar la información automáticamente
En este primer vídeo de una serie de cuatro damos un paso más en el proyecto que empezamos hace unas semanas: montar un diagrama de Gantt en Excel. Ahora le añadimos una vuelta de tuerca y empezamos a calcular el CPM (Critical Path Method), es decir, la ruta crítica de las tareas de un proyecto directamente con fórmulas de Excel. Lo hemos dividido en cuatro partes porque hay varios puntos con una complejidad extra que conviene tratar con calma.
En esta primera entrega nos centramos en un concepto clave: el momento más temprano en el que una tarea puede empezar, teniendo en cuenta sus dependencias.
El punto de partida: tareas, predecesores y dependencias
Partimos de una tabla muy sencilla en la que cada actividad se identifica con una letra. Junto a las actividades tenemos:
- Una columna de predecesores, que indica de qué tareas depende cada una.
- Una columna de apoyo con asteriscos que veremos cómo aprovechar.
Entender cómo están relacionadas las tareas entre sí es una de las claves para poder generar la ruta crítica: necesitamos detectar qué tareas son necesarias antes de que pueda empezar otra. Eso nos dirá el momento más temprano en el que una tarea puede arrancar, sabiendo que las tareas de las que depende ya tienen que haber terminado.
La función CONTAR.SI y su forma inversa
Para este cálculo nos apoyamos en la función CONTAR.SI. Lo habitual es usarla para contar cuántas veces aparece un elemento dentro de una columna: le damos un rango y un criterio (por ejemplo, una letra) y nos devuelve cuántas veces aparece. Si en el criterio añadimos asteriscos (*), estos actúan como comodín y la fórmula sigue localizando la coincidencia.
Pero CONTAR.SI tiene una forma inversa muy útil. Si en lugar de comparar el rango con un criterio único hacemos que el criterio sea el rango (preguntando si una celda aparece dentro de varias), el resultado deja de ser un número y pasa a ser una matriz que nos indica en qué posición se encuentra cada coincidencia. Por ejemplo, si buscamos la letra B, nos dice que está en la segunda posición; al cambiar la letra, nos va señalando dónde está cada una.
El detalle importante: esta forma inversa solo funciona cuando el comodín está en la parte adecuada del argumento. Por eso resulta clave preparar una columna de apoyo que incluya los asteriscos, de modo que la comparativa reconozca todas las posiciones cuando una tarea tiene más de un predecesor (varias letras separadas). Con esa columna de chequeo, la matriz nos devuelve correctamente todas las posiciones de las letras implicadas.
Combinar CONTAR.SI con FILTRAR
Una vez tenemos esa matriz de posiciones, la pasamos a la función FILTRAR. Así podemos extraer, dentro de la columna de inicios o finales, justo las tareas relacionadas con esas posiciones (por ejemplo, las posiciones 3, 5 y 6). Esta combinación de CONTAR.SI (en su forma matricial) con FILTRAR es la base de todo lo que viene después.
Calcular el final más temprano y el inicio más temprano
Con esas dos funciones dominadas, el resto es bastante directo:
- Final más temprano: es lo más fácil de calcular. Equivale al momento más temprano en que una tarea puede empezar más su duración asignada. Si una tarea empieza en el momento cero, su final más temprano será cero más su duración.
- Inicio más temprano: aquí distinguimos dos casos con un condicional.
- Sin predecesores: si la tarea no depende de ninguna otra (su campo de predecesores es igual al identificador de "sin predecesor", marcado con tres guiones), puede empezar en el momento cero. Le sumamos la duración y obtenemos su final.
- Con predecesores: aplicamos el combo de
CONTAR.SI+FILTRAR. Buscamos la letra de la tarea dentro del rango de la columna preparada con asteriscos para reconocer todas sus posiciones, y conFILTRARrecuperamos los momentos de finalización de todas las tareas de las que depende. El máximo de esos finales es el momento en que la tarea puede empezar: solo cuando todas sus predecesoras han acabado.
Por ejemplo, una tarea con dos dependencias puede depender de una que acaba en el momento 90 y de otra que acaba en el 185. El primer momento en que puede ejecutarse es el máximo de esos dos valores, porque hasta entonces no se han cumplido todos sus condicionantes previos. Esta lógica se aplica tarea por tarea hasta rellenar toda la columna.
Conclusión
Con esto completamos el primer paso para calcular el CPM en Excel. Es un trabajo conceptual que merece la pena dejar claro, porque las funciones CONTAR.SI y FILTRAR son la pieza fundamental sobre la que construiremos el resto. En los siguientes vídeos iremos complementando todos los datos necesarios para terminar de calcular la ruta crítica y montar una herramienta completa de gestión de proyectos con un diagrama de Gantt que se calcula automáticamente. Si te resulta útil, sigue la serie hasta el final.
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
- Tabla calendario completa con una sola fórmula de desbordamiento CasoHéctor lanza el reto: ¿se puede crear una tabla calendario completa (año, mes, nombre del mes, día, nombre del día, fecha formateada) con un
- Filtro multicriteria dinámico con LET, FILTRAR y LAMBDA CasoHector comparte con la comunidad una fórmula avanzada para filtrar una tabla de productos/servicios por múltiples criterios opcionales (clav