Rellenar celdas vacías con el valor anterior usando SCAN y BUSCAR

Hugo plantea un problema habitual al importar datos: una fila de encabezados tiene celdas vacías que deberían heredar el valor de la celda anterior (forward-fill). Por ejemplo: | Ventas | | | Compras | | | debería ser | Ventas | Ventas | Ventas | Compras | Compras | Compras |.

Dos enfoques completamente distintos para resolverlo:

Con SCAN (Nacho): el patrón clásico de acumulador. SCAN recorre cada celda y, si está vacía, mantiene el valor anterior; si tiene contenido, lo actualiza:

``
=SCAN(""; C4:H4; LAMBDA(A; I; SI(I = ""; A; I)))
`

John propone una variante casi idéntica usando v > 0 como test:

`
=SCAN(; C4:H4; LAMBDA(a; v; SI(v > 0; v; a)))
`

Con BUSCAR sin SCAN (John): la solución más creativa. Aprovecha una propiedad poco conocida de BUSCAR: cuando encuentra un error en el array de búsqueda, lo salta automáticamente y devuelve el último valor válido anterior. Al convertir las celdas vacías en errores con MES(1&celda), BUSCAR hace el forward-fill de forma implícita:

`
=BUSCAR(COLUMNA(C4:H4) / 3; MES(1&C4:H4); C4:H4)
`

El truco es que MES(1&"Ventas") devuelve un número válido, pero MES(1&"") devuelve error, y BUSCAR ignora esos errores retornando el último match válido.

Hugo además extiende el caso limpiando previamente los encabezados de texto tipo "Column1", "Column2" (típicos de Power Query) con REGEXREEMPLAZAR antes de aplicar el SCAN`.

Cuando importas datos desde otro sistema —o cuando los traes con Power Query— es muy habitual encontrarte una fila de encabezados a medio rellenar: Ventas aparece una sola vez y las dos celdas siguientes se quedan en blanco, aunque pertenezcan al mismo bloque. Para poder filtrar, agrupar o cruzar esos datos necesitas que cada celda tenga su valor, así que hay que arrastrar hacia la derecha el último valor que sí estaba escrito. Es lo que se conoce como forward fill, y en Excel 365 se resuelve con una sola fórmula.

El problema que planteó Hugo

La fila de partida es esta:

| Ventas |  |  | Compras |  |  |

Y el resultado que hace falta es este:

| Ventas | Ventas | Ventas | Compras | Compras | Compras |

Nada de copiar y pegar a mano: la fila cambia cada vez que se refresca la importación, así que la solución tiene que ser dinámica.

Solución 1: SCAN como acumulador

SCAN es la función pensada exactamente para esto. Recorre el rango de izquierda a derecha arrastrando un acumulador, y en cada paso decides qué guardas en él. Aquí la regla es sencilla: si la celda está vacía, mantén lo que llevabas; si tiene contenido, actualiza.

=SCAN(""; C4:H4; LAMBDA(A; I; SI(I = ""; A; I)))
  • El primer argumento ("") es el valor inicial del acumulador.
  • A es lo que arrastras, I es la celda que se está evaluando.
  • SI(I = ""; A; I) decide entre heredar o refrescar.

John propuso una variante prácticamente idéntica, cambiando el test de vacío por una comparación numérica:

=SCAN(; C4:H4; LAMBDA(a; v; SI(v > 0; v; a)))

Funciona igual de bien cuando los valores son textos, porque una celda vacía no supera esa comparación. Fíjate además en el primer argumento omitido: SCAN(; arranca el acumulador vacío sin tener que escribir las comillas.

Solución 2: BUSCAR haciendo el trabajo sin SCAN

La aportación más ingeniosa vino también de John, y aprovecha una propiedad poco conocida de BUSCAR: cuando encuentra un error dentro del vector de búsqueda, lo salta y devuelve el último valor válido anterior. Si conseguimos que las celdas vacías se conviertan en errores, BUSCAR hace el forward fill solo, sin acumuladores ni LAMBDA.

=BUSCAR(COLUMNA(C4:H4) / 3; MES(1&C4:H4); C4:H4)

El truco está en MES(1&celda):

  • MES(1&"Ventas") devuelve un número perfectamente válido.
  • MES(1&"") devuelve error.

Así, el vector de búsqueda queda salpicado de errores justo en las posiciones vacías, y BUSCAR los ignora arrastrando el último encabezado bueno. Es una fórmula corta y rapidísima, aunque cueste más de leer que el SCAN.

Limpiar antes los encabezados de Power Query

Hugo extendió el caso con un detalle muy real: cuando la tabla viene de Power Query, los huecos no siempre están vacíos de verdad. Muchas veces contienen los típicos Column1, Column2, Column3 que Power Query genera de forma automática. Si no los quitas primero, el SCAN los tomará por valores buenos y los arrastrará.

La limpieza previa se hace con REGEXREEMPLAZAR, sustituyendo por texto vacío cualquier encabezado que siga ese patrón, y solo después se aplica el relleno hacia la derecha. Es un buen recordatorio de que el primer paso de un forward fill es decidir qué cuenta como vacío.

Funciones clave

  • SCAN: recorre un rango arrastrando un acumulador y devuelve todos los resultados intermedios. Es el patrón estándar del forward fill.
  • LAMBDA: define la regla que se aplica en cada paso del SCAN (heredar o refrescar).
  • BUSCAR: en su forma clásica, ignora los errores del vector de búsqueda y devuelve el último valor válido; esa "limitación" es justo lo que aquí resuelve el problema.
  • MES: se usa como generador de errores controlado, no por su significado de fecha.
  • REGEXREEMPLAZAR: limpia los encabezados automáticos antes de rellenar.

Conclusión

El mismo problema, dos caminos muy distintos: uno explícito y legible (SCAN con su regla escrita a mano) y otro que se apoya en un comportamiento lateral de una función de toda la vida (BUSCAR saltando errores). Si vas a compartir la hoja con más gente, el SCAN se defiende solo; si buscas la fórmula más corta posible, la de BUSCAR es difícil de superar.

Este tipo de matices salen del día a día de la comunidad de InflueXcel, donde alguien plantea un problema real y en unas horas hay tres formas distintas de resolverlo sobre la mesa.

Más casos con estas funciones

Más contenido de Excel en InflueXcel