La idea
Una función condicional es un bucle que nunca escribes. SUMIF baja por una columna, pregunta a cada fila "¿pasas mi prueba?" y suma la tercera columna solo en las filas que dijeron que sí. COUNTIF hace lo mismo y cuenta los síes.
Piénsalo como un filtro seguido de una agregación, lo que SQL escribe como WHERE y SUM. La prueba es la parte que controlas tú, y casi todos los errores de este capítulo son errores en la prueba. Lee el diagrama como un guion corto: elige una prueba, marca las filas que pasan y suma solo las filas marcadas.
Figura 1
Ocho pedidos del Black Friday, filtrados con SUMIFS
| order_id | channel | status | coupon_code | subtotal |
|---|---|---|---|---|
| 12059 | app | refunded | BFCM25 | 424.46 |
| 12060 | app | completed | 119.94 | |
| 12061 | web | completed | BFCM25 | 8.99 |
| 12062 | web | completed | 339.86 | |
| 12063 | app | completed | 132.97 | |
| 12064 | app | completed | 2002.88 | |
| 12065 | app | completed | 136.95 | |
| 12066 | app | completed | BFCM25 | 26.99 |
| formula | returns |
|---|---|
| =SUMIF(B2:B9,"app",E2:E9) | 2844.19 |
| =SUMIFS(E2:E9,B2:B9,"app",C2:C9,"completed") | 2419.73 |
- Un día de pedidos de Harbor & Pine en
A2:E9. La pregunta: ¿cuántos ingresos llegaron por la app? La respuesta es una suma desubtotal, pero solo sobre algunas filas. SUMIF(B2:B9, "app", E2:E9)tiene tres partes. El primer rango se prueba, fila por fila, contra el criterio "app". El tercer rango es lo que se suma. Las filas 12061 y 12062 no pasan la prueba.- Solo las filas que sobreviven aportan su
subtotal: 424.46 + 119.94 + 132.97 + 2002.88 + 136.95 + 26.99 = 2844.19. - El pedido 12059 fue reembolsado, así que ese ingreso no es real.
SUMIFSañade una segunda prueba y una fila debe pasar las dos. 12059 falla la prueba del estado y queda fuera. - Cinco filas pasan las dos pruebas: 2844.19 − 424.46 = 2419.73. Cada condición extra solo puede quitar filas, nunca añadirlas.
Por qué existe
Los responsables rara vez piden "el total". Piden "el total de la app", "el total de los pedidos completados de más de $250", "solo el fin de semana de la promoción". Sin funciones condicionales filtrarías la hoja, seleccionarías las celdas visibles, leerías un número en la barra de estado y lo pegarías en otro sitio, y tendrías que repetirlo todo cuando cambie un pedido.
Una fórmula condicional mantiene viva la pregunta. Apunta el criterio a una celda que contiene "app", y al escribir "web" en esa celda la pregunta se responde de nuevo al instante. Una fórmula arrastrada a lo ancho y a lo largo de una cuadrícula de canales y estados da la tabla de resumen completa.
Cómo funciona por dentro
Los rangos se alinean fila por fila
En SUMIF(rango, criterio, rango_suma), el rango que se prueba y el que se suma deben tener la misma forma. Excel los empareja por posición: la fila 1 de uno con la fila 1 del otro. Si desplazas uno de ellos una fila, por ejemplo B2:B9 contra E3:E10, cada prueba se aplica al importe equivocado. No aparece ningún error. SUMIFS invierte el orden de sus argumentos: el rango que se suma va primero, y luego vienen pares de rango y criterio.
Varias condiciones significan "y"
SUMIFS, COUNTIFS, AVERAGEIFS, MAXIFS y MINIFS aceptan tantos pares de rango y criterio como quieras. Una fila cuenta solo si pasan todos los pares. Para un "o", suma dos SUMIFS separados, pero asegúrate de que ninguna fila pueda pasar ambos o la contarás dos veces. MAXIFS y MINIFS encuentran el valor mayor o menor entre las filas que pasan, como el pedido completado más grande de un fin de semana.
Los criterios son cadenas
Cada criterio se lee como texto y se interpreta. Un valor simple significa igual. Un operador al principio (>, >=, <, <=, <>) cambia la comparación. * y ? son comodines en texto. Para comparar con una celda, pega el operador y la celda: ">="&H1 se convierte en ">=250" cuando H1 contiene 250. Olvidar las comillas o el & es la razón habitual por la que un criterio no coincide con nada sin avisar.
Figura 2
Qué coincide con cada criterio en los mismos ocho pedidos
| criterion | tested_against | rows_matching |
|---|---|---|
| "app" | channel | 6 |
| ">=250" | subtotal | 3 |
| "<>refunded" | status | 7 |
| "BF*" | coupon_code | 3 |
| "<>BFCM25" | coupon_code | 5 |
| "" | coupon_code | 5 |
- Un criterio es una cadena pequeña. Una palabra sola significa igual:
"app"coincide con las seis filas cuyo canal es exactamente app (no importan las mayúsculas). - Un operador de comparación va dentro de las comillas.
">=250"conserva los subtotales de 250 o más: 424.46, 339.86 y 2002.88, es decir, tres filas. "<>refunded"significa distinto de. Siete de las ocho filas pasan, porque solo 12059 está reembolsado.*representa cualquier cadena de caracteres y?uno solo."BF*"coincide con los cupones que empiezan por BF: tres filas. Las celdas vacías no son texto, así que un comodín nunca las incluye."<>BFCM25"coincide con las cinco filas que tienen un cupón distinto, y las celdas vacías cuentan como distintas. Si solo quieres las filas que tienen cupón, usa"*", no"<>".
Qué cuenta como vacío
Hay tres preguntas sobre el vacío, y cada una tiene su función. COUNTA cuenta las celdas que contienen algo, COUNT cuenta solo números y COUNTBLANK cuenta celdas vacías. Una celda con una cadena vacía "" devuelta por una fórmula parece vacía pero es texto. Como "<>x" significa "cualquier cosa excepto x", incluye las celdas vacías. Si quieres decir "tiene un valor distinto de x", exprésalo con dos condiciones: "<>x" y "<>".
Una fórmula para toda una tabla de resumen
El mejor uso de estas funciones es una cuadrícula. Pon los canales en la columna A y los estados en la fila 1, y escribe un solo SUMIFS en la celda superior izquierda: el rango de importes y los dos rangos de criterios bloqueados con $ en todas las esquinas, y los dos criterios apuntando a las etiquetas con referencias mixtas, $A2 para el canal y B$1 para el estado. Rellénala a la derecha y hacia abajo y cada celda se hace su propia pregunta: este canal, este estado. Es la idea de las referencias mixtas del primer capítulo trabajando de verdad, y sustituye a una tabla dinámica cuando necesitas un diseño pequeño y fijo.
Añade una fila y una columna de totales con SUM simple y compara el total general con un SUM de toda la columna de importes. Si difieren, algún pedido tiene un canal o un estado que tus etiquetas no incluyen, una errata o un espacio al final, y ese pedido falta en la tabla sin avisar.
Comprobar la respuesta
La comprobación rápida es un filtro. Aplica un autofiltro con las mismas condiciones, selecciona la columna de importes y lee la suma en la barra de estado de abajo. Si coincide con la fórmula, los criterios hacen lo que crees. Si no, compara el número de filas visibles con COUNTIFS con las mismas condiciones: un recuento que no coincide apunta a un criterio incorrecto; un recuento que coincide pero una suma que no, apunta a rangos desalineados.
Errores comunes
"SUMIF suma la columna que pruebo"
El primer rango se prueba y el tercero se suma. A menudo son columnas distintas, y si omites el tercero, SUMIF suma el propio rango probado. Eso solo es lo que quieres cuando la prueba y el importe son la misma columna, como "suma los subtotales que son al menos 250".
"Una segunda condición amplía el resultado"
Cada par extra de SUMIFS lo reduce. Dos pruebas unidas así significan que ambas deben ser verdaderas. Si quieres los pedidos de la app o de la web, un solo SUMIFS con las dos condiciones de canal devuelve cero, porque ninguna fila está en dos canales.
"<> significa que tiene un valor distinto"
Significa distinto de, y una celda vacía no es igual a nada. Contar "pedidos sin el cupón BFCM25" con "<>BFCM25" incluye por tanto los pedidos que no tienen ningún cupón. Ahí resulta ser la respuesta correcta, pero para "pedidos con algún otro cupón" cuenta de más sin avisar.
Ponte a prueba
Una pregunta. Al responderla, la lección queda marcada en el mapa; nunca bloquea un nivel.
No del todo. Una celda vacía no es igual a BFCM25, así que pasa <>BFCM25. Los pedidos sin ningún cupón se cuentan.Prueba otra respuesta.
Correcto. Seis pedidos son de la app. 12059 y 12066 usan BFCM25 y fallan la segunda prueba; los otros cuatro tienen el cupón vacío, que cuenta como distinto.
No del todo. Las celdas vacías no se ignoran. Se comparan como cualquier otro valor, y una celda vacía no es igual a BFCM25.Prueba otra respuesta.
No del todo. Ese es el recuento solo de la prueba del cupón. La primera condición limita primero las filas a la app, y deben pasar las dos.Prueba otra respuesta.
Lección hecha: ya está marcada en el mapa.