SCAN en Excel explicado desde CERO
En este vídeo te explico paso a paso cómo funciona SCAN en Excel, una de las funciones más potentes y desconocidas de las nuevas funciones dinámicas de Excel 365.
Qué es SCAN y por qué merece la pena aprenderla
SCAN es una de las funciones más potentes y menos conocidas de Excel. Sirve para hacer acumulados, rellenar huecos automáticamente y simular bucles sin usar macros. Y una vez entiendes su estructura, la puedes aplicar en muchísimas situaciones.
La función tiene tres parámetros:
=SCAN(valor_inicial; matriz; función)- valor inicial: el punto de partida del acumulado. Puede ser un número o un texto.
- matriz: los valores por los que va a ir pasando, uno a uno.
- función: la operación que quieres aplicar en cada paso.
Cómo funciona por dentro
Imagina que la matriz tiene tres elementos: 1, 3 y 5, y el valor inicial es 0.
SCAN da tantos pasos como elementos haya. En cada paso maneja dos valores: el acumulado que viene del paso anterior y el valor de la fila que está recorriendo.
- Paso 1: acumulado 0 y fila 1. Los suma: 1.
- Paso 2: acumulado 1 y fila 3. Los suma: 4.
- Paso 3: acumulado 4 y fila 5. Los suma: 9.
El resultado de SCAN es esa secuencia completa: 1, 4, 9. Es decir, te devuelve el acumulado en cada punto, no solo el total final.
Caso 1: la suma acumulada
Con una tabla de ventas por día de la semana, el acumulado se resuelve así:
=SCAN(0; ventas; SUMA)Empezamos en 0 porque antes del lunes no hay nada acumulado. Poner SUMA directamente funciona con algunas funciones, pero en el fondo es un atajo de la versión completa, que usa LAMBDA:
=SCAN(0; ventas; LAMBDA(acumulado; fila; acumulado + fila))Que no te asuste LAMBDA. Lo único que haces ahí es ponerle nombre a los dos valores que SCAN genera internamente en cada paso. El primero es siempre el acumulado y el segundo el valor de la fila. Los nombres los eliges tú: podrías escribir LAMBDA(a; f; a + f) y el resultado sería idéntico.
Caso 2: la suma acumulada condicional
Ahora queremos acumular solo los días en los que la venta superó 100. No existe una función directa que lo haga, pero con el desglose de LAMBDA te la montas:
=SCAN(0; ventas; LAMBDA(acumulado; fila;
SI(fila > 100; acumulado + fila; acumulado)))Si la fila cumple la condición, sumamos. Si no, devolvemos el acumulado tal cual, sin añadir nada. Aquí está la clave: dentro de LAMBDA puedes usar cualquier función de Excel, no solo operaciones aritméticas.
Caso 3: rellenar huecos en una columna
Este es el caso clásico de los informes que llegan con el nombre escrito solo en la primera fila de cada bloque y el resto en blanco. Así como está no sirve para tablas dinámicas ni para funciones matriciales.
=SCAN(""; nombres; LAMBDA(anterior; fila;
SI(NO(fila = ""); fila; anterior)))Empezamos con texto vacío. Si la fila trae un valor, ese valor pasa a ser el nuevo "anterior". Si viene vacía, repetimos el último valor que vimos. Fíjate en que aquí llamamos anterior al acumulado, porque se entiende mucho mejor lo que hace.
Caso 4: acumulado que se reinicia por producto
Aquí aparece una propiedad especial de SCAN: cuando le pasas un rango de celdas (y no una matriz), el parámetro de fila no es solo el valor, sino la referencia a esa celda. Eso permite usar funciones de referencia como DESREF para mirar celdas vecinas.
El objetivo es acumular mientras el producto se repita y empezar de cero cuando cambie. La lógica: comparar el producto de la fila actual con el de la fila anterior, usando DESREF sobre la referencia de fila con un desplazamiento de una fila hacia arriba y una columna hacia la izquierda, frente al de la misma fila y una columna a la izquierda. Si coinciden, sumamos acumulado más fila; si no, devolvemos solo la fila, descartando lo acumulado hasta ese punto.
Cuando la fórmula empieza a crecer, viene bien el complemento Excel Labs para verla bien estructurada mientras la escribes.
Funciones clave
SCAN— recorre una matriz devolviendo el acumulado en cada pasoLAMBDA— define los nombres del acumulado y de la fila, y la operación a aplicarDESREF— permite mirar celdas vecinas cuando pasas un rango en vez de una matrizENCOL— convierte una matriz en una sola columnaUNIRCADENAS— junta valores con un delimitador que tú eligesDIVIDIRTEXTO— separa un texto por delimitador de columna y de filaAGRUPARPOR— agrega el resultado final ya en formato de tabla plana
El reto final: de tabla cruzada a tabla plana
SCAN también trabaja en horizontal. En el ejercicio final se usa dos veces: una en vertical para rellenar la columna de grupos y otra en horizontal para rellenar la fila de trimestres. Con la tabla ya completa, se concatenan grupo y trimestre con un punto y coma como separador, se añade el importe, se lleva todo a una columna con ENCOL, se une en un único texto con UNIRCADENAS usando la barra vertical como delimitador y se deshace con DIVIDIRTEXTO, indicando el punto y coma como delimitador de columna y la barra vertical como delimitador de fila.
El resultado llega como texto, así que la columna de importes se extrae con ELEGIRCOLS y se convierte a número con N() o con el doble negativo. A partir de ahí ya puedes aplicar AGRUPARPOR con normalidad.
Conclusión
SCAN cambia la forma de trabajar con Excel: acumulados, rellenado de series y referencias dinámicas sin una sola macro. Y es solo la puerta de entrada, porque detrás vienen REDUCE, BYROW, BYCOL y toda la familia.
Puedes descargar el fichero con todos los ejemplos del ejercicio en InflueXcel, donde la comunidad comparte a diario casos reales resueltos como este.
Más casos con estas funciones
Más contenido de Excel en InflueXcel
- Media móvil dinámica: 6 enfoques con SCAN, MMULT y MAP CasoUn miembro de la comunidad tiene un rango con ventas mensuales y necesita generar una columna con la media móvil de los últimos 3 meses usan
- Despivotar una tabla cruzada con fórmulas: SCAN+GROUPBY vs TEXTSPLIT+TOROW CasoUn miembro comparte un fichero con datos en formato tabla cruzada: 4 proyectos en filas, 12 meses en columnas, cada mes con dos sub-columnas
- Rellenar celdas vacías con el valor anterior usando SCAN y BUSCAR CasoHugo plantea un problema habitual al importar datos: una fila de encabezados tiene celdas vacías que deberían heredar el valor de la celda a
- Comparar elemento actual con el anterior: limitaciones de SCAN y solución elegante CasoUn miembro de la comunidad intenta usar SCAN con una "matriz coja" (dos columnas apiladas horizontalmente) para comparar cada elemento con e
- 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
- Acumular saldo con registros duplicados usando AGRUPARPOR y SCAN CasoJuan intenta acumular saldos cuando hay registros con la misma clave, pero ni BYROW, ni SCAN, ni AGRUPARPOR por separado le dan el resultado
- Convertir IF con referencia a celda anterior en fórmula array con SCAN CasoAnita plantea un reto técnico interesante: tiene la fórmula =SI(B4=B3; D3+1; 1) que incrementa un contador cuando la celda actual coincide c
- Repetir valores N veces: tres enfoques con REDUCE, SCAN y ARCHIVOMAKEARRAY CasoJoan Recasens plantea un problema clásico: tiene una lista de categorías (A, B, C) con el número de repeticiones de cada una (4, 2, 3) y qui
- Retos de entrevista con Power Query TutorialTres pruebas técnicas reales de las que caen en procesos de selección para puestos de datos, resueltas paso a paso con Power Query. Sirven i
- Filtrar filas con todos los valores a cero: 4 enfoques con FILTRAR y BYROW CasoJuan tiene una tabla grande donde muchas filas contienen solo ceros y necesita filtrarlas para quedarse solo con las que tienen datos reales