SCAN en Excel explicado desde CERO

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 paso
  • LAMBDA — define los nombres del acumulado y de la fila, y la operación a aplicar
  • DESREF — permite mirar celdas vecinas cuando pasas un rango en vez de una matriz
  • ENCOL — convierte una matriz en una sola columna
  • UNIRCADENAS — junta valores con un delimitador que tú eliges
  • DIVIDIRTEXTO — separa un texto por delimitador de columna y de fila
  • AGRUPARPOR — 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