lección 4
Lógica y agregación con condición: SI, SUMAR.SI y CONTAR.SI
Resumir con una condición y clasificar fila a fila. SUMAR.SI y sus versiones CONJUNTO, el SI anidado y su trampa del orden, y SI.CONJUNTO. Son el SUM ... WHERE y el CASE WHEN de la hoja de cálculo.
⏱ 35 min
Hay una pregunta que le hacen a un analista varias veces al día y que casi nunca viene formulada como una pregunta técnica. Suena así: «¿cuánto hemos facturado de bebidas en Madrid?». O así: «¿cuántos pedidos hizo el cliente 42?». O así: «etiquétame cada pedido como grande, mediano o pequeño para que logística sepa por dónde empezar». Las tres son la misma familia de problema, y las tres se resuelven con las fórmulas de esta lección.
Lo que tienen en común es que no traen datos de ningún otro sitio: trabajan con lo que ya está en la tabla. Las dos primeras RESUMEN —cogen muchas filas y devuelven un número, pero solo de las filas que cumplen una condición—. La tercera CLASIFICA: recorre las filas una a una y le pone una etiqueta a cada una según una regla. Resumir con condición y clasificar fila a fila son dos operaciones distintas, y conviene no mezclarlas, porque cada una tiene su familia de fórmulas y su trampa característica.
Y la buena noticia es que ya piensas como estas fórmulas piden que pienses. Sabes que filtrar por una condición es un WHERE y que agrupar y sumar es un GROUP BY. Lo único que falta es la sintaxis de la hoja, y cada fórmula la vamos a cerrar conectándola con su equivalente en SQL, para que no aprendas dos mundos separados sino el mismo mundo con dos idiomas.
### SUMAR.SI y su familia: agregar con condición
Empecemos por resumir. Quieres un número que salga de muchas filas, pero no de todas: solo de las que cumplen algo. «¿Cuánto hemos vendido en total de la categoría bebidas?», «¿cuántos pedidos hizo el cliente 42?», «¿cuál es el ticket medio en la tienda de Madrid?». Eso es agregar con una condición, y la familia SUMAR.SI / CONTAR.SI / PROMEDIO.SI lo resuelve.
1=SUMAR.SI(B2:B1000; "bebidas"; C2:C1000)2=CONTAR.SI(B2:B1000; "bebidas")3=PROMEDIO.SI(B2:B1000; "bebidas"; C2:C1000)
Sumar, contar y promediar filtrando por una condición
¿Y cuando la condición no es una sola sino varias? "¿Cuánto vendimos de bebidas EN Madrid EN enero?". Ahí entran las versiones CONJUNTO: SUMAR.SI.CONJUNTO, CONTAR.SI.CONJUNTO y PROMEDIO.SI.CONJUNTO. Son las mismas funciones pero admiten varios pares de rango y criterio. Ojo a un detalle que confunde a mucha gente: en las versiones CONJUNTO, el rango que se suma va PRIMERO, mientras que en el SUMAR.SI normal va al final. Es un cambio de orden que provoca errores tontos.
1=SUMAR.SI.CONJUNTO(C2:C1000; B2:B1000; "bebidas"; D2:D1000; "Madrid")
Sumar con dos condiciones a la vez
Conexión con SQL, y aquí hay un matiz que casi todo el mundo dice mal. SUMAR.SI es un SELECT SUM(importe) FROM ventas WHERE categoria = "bebidas": el rango de criterio es el WHERE, el rango que sumas es lo que va dentro del SUM, y el resultado es UNA fila. CONTAR.SI es COUNT(*), PROMEDIO.SI es AVG(), y las versiones CONJUNTO son lo mismo con varios AND. Lo que NO es, todavía, es un GROUP BY: un SUMAR.SI suelto devuelve un número, no un desglose. Se convierte en GROUP BY cuando escribes al lado la lista de categorías distintas y arrastras la fórmula, porque ahí estás sacando a mano los valores únicos que el GROUP BY saca solo. Y esa misma tarea, hecha con el ratón y sin arrastrar nada, tiene un nombre: tabla dinámica, y tiene su propia lección en este módulo.
Consejo de senior: el orden de los argumentos en las versiones CONJUNTO es la fuente de errores tontos más productiva de toda la familia. En SUMAR.SI el rango que sumas va al FINAL; en SUMAR.SI.CONJUNTO va al PRINCIPIO. Y CONTAR.SI.CONJUNTO no lleva rango que sumar en absoluto, porque contar filas no necesita una columna numérica. Si una de estas te devuelve un número que no cuadra o un #¡VALOR!, cuenta los argumentos antes de buscar el fallo en los datos.
### SI anidado y SI.CONJUNTO: lógica condicional
Cambiamos de operación. Hasta ahora resumíamos: muchas filas, un número. Ahora queremos lo contrario, clasificar cada fila por su cuenta: "si el importe supera 100 euros, es un pedido grande; si no, es pequeño". "Si la nota es mayor o igual a 90, categoría A; entre 70 y 90, B; por debajo, C". Esto es SI (en inglés IF), y cuando hay varios tramos, se puede anidar un SI dentro de otro.
1=SI(C2>=90; "A"; SI(C2>=70; "B"; "C"))
SI anidado para clasificar en tres tramos
Anidar tres o cuatro SI es manejable. Anidar siete es una pesadilla de paréntesis que nadie entiende al mes siguiente. Por eso las versiones modernas de Excel y Google Sheets tienen SI.CONJUNTO (IFS en inglés), que lista las condiciones una detrás de otra sin anidar. Es más legible y más difícil de romper.
1=SI.CONJUNTO(C2>=90; "A"; C2>=70; "B"; VERDADERO; "C")
La misma clasificación, más legible con SI.CONJUNTO
El error más común del SI anidado es el orden de los tramos. Si escribes =SI(C2>=70;"B";SI(C2>=90;"A";"C")), una nota de 95 devolverá "B", no "A": como 95 es mayor que 70, entra en la primera condición y ni siquiera llega a comprobar el tramo de 90. Siempre de más restrictivo a menos, de mayor a menor. Este fallo pasa desapercibido porque la fórmula no da error: da una clasificación incorrecta con toda tranquilidad.
Conexión con SQL: SI y SI.CONJUNTO son el CASE WHEN. La fórmula de arriba es CASE WHEN nota >= 90 THEN "A" WHEN nota >= 70 THEN "B" ELSE "C" END. El orden de los WHEN importa igual que el orden de los SI, y por el mismo motivo: se evalúan de arriba abajo y gana el primero que se cumple. El VERDADERO final del SI.CONJUNTO es exactamente el ELSE del CASE.
### Chuleta de la sección: la fórmula y su equivalente en SQL
Esta tabla va más allá de lo que acabas de ver, porque es el resumen de toda la sección y merece la pena tenerla junta. Las dos últimas filas son de esta lección. Las tres primeras cubren los cruces y la agregación: la primera te sonará de la lección de apertura, y la lección de las búsquedas entra en el detalle de cada técnica.
Fíjate en el patrón: no hay ni una fórmula de la sección que no tenga un equivalente exacto en SQL. Cruzar es JOIN, agregar con condición es SUM/COUNT/AVG con WHERE, clasificar es CASE WHEN. No estás aprendiendo dos herramientas rivales: estás aprendiendo el mismo puñado de operaciones sobre tablas, expresadas en el idioma de la hoja o en el idioma de la base de datos. El día que te toque migrar un informe de Excel a SQL, verás que no traduces conceptos, solo sintaxis.
### Resumen
- Resumir con condición y clasificar fila a fila son dos operaciones distintas. La primera coge muchas filas y devuelve un número; la segunda recorre las filas y etiqueta cada una.
- SUMAR.SI, CONTAR.SI y PROMEDIO.SI agregan solo las filas que cumplen una condición. En SQL son SUM, COUNT y AVG con un WHERE.
- Las versiones CONJUNTO admiten varias condiciones, y le dan la vuelta al orden: el rango que sumas va PRIMERO, no al final. CONTAR.SI.CONJUNTO no lleva ese rango, porque contar no necesita una columna numérica.
- Un SUMAR.SI suelto no es un GROUP BY: devuelve un número, no un desglose. Se convierte en GROUP BY cuando escribes al lado la lista de valores únicos y arrastras.
- SI clasifica, y anidado cubre varios tramos. SI.CONJUNTO hace lo mismo sin paréntesis encajados, con VERDADERO al final como cajón de sastre.
- El orden de los tramos es la trampa: siempre de mayor a menor. Al revés, la fórmula no da error, da una clasificación incorrecta.
- SI y SI.CONJUNTO son el CASE WHEN de SQL, y el orden de los WHEN manda por el mismo motivo: gana el primero que se cumple.
Regístrate para guardar tu progreso.
## comentarios
Reporta erratas, ayuda a otros o comparte tu opinión. Sé constructivo.
Inicia sesión para comentar y responder.
cargando comentarios...