Análisis de datos

Cómo resolver el error #SPILL! en Excel: guía completa

ModelMonkey11 de junio de 202610 min de lectura

Por qué el rango de expansión no está vacío aunque lo parezca

El motor de arreglos dinámicos de Excel, incorporado en Excel 365 en 2019 y documentado por Microsoft en su guía "Dynamic array formulas and spilled array behavior" (actualizada el 11 de junio de 2026), cubre 7 funciones: SEQUENCE, FILTER, UNIQUE, SORT, SORTBY, XLOOKUP y XMATCH. Ninguna de ellas escribe resultados en celdas que no estén verdaderamente vacías. "Verdaderamente vacía" significa que ISBLANK() devuelve TRUE. Una celda que no muestra nada pero contiene un espacio, una cadena de longitud cero generada por una fórmula, o formato invisible, no supera esa prueba.

Google Sheets aplica la misma verificación. Según la documentación oficial de Google Sheets para ARRAYFORMULA (vigente al 11 de junio de 2026), la expansión se detiene ante cualquier celda ocupada en la ruta de salida, sin importar si el contenido es visible o no.

Las cinco causas, ordenadas por el tiempo que suelen hacerte perder:

Causa¿Parece vacía?ISBLANK()LEN()Solución
Fórmula que devuelve ""SíFALSE0Eliminar o reemplazar la fórmula
Carácter de espacioSíFALSE1Eliminar
Espacio no separable (Unicode 160)SíFALSE1Buscar y reemplazar el carácter
Celdas fusionadas en el rangoSin borde visibleN/AN/ADesfusionar
Número con formato ;;; (oculto)SíFALSEvaríaBorrar todo el formato

El caso de la fórmula que devuelve una cadena vacía es el más difícil de detectar. Una celda en la ruta de expansión contiene algo como =IF(Supuestos!$B$4="","",Supuestos!$B$4), que evaluó a "" cuando se limpió el supuesto. La celda se ve completamente vacía: no hay valor, no hay contenido visible, no hay ninguna pista de formato. Pero ISBLANK() devuelve FALSE y Excel no expande el arreglo a través de ella.

Cómo encontrar la celda que bloquea el rango

En Excel: método F5 en 10 segundos

  1. Haz clic en la celda que muestra #SPILL!. Aparece un borde azul punteado alrededor del rango de salida esperado.
  2. Presiona F5 → Especial → Celdas en blanco. Esto selecciona solo las celdas verdaderamente vacías, dejando sin seleccionar la celda bloqueante. El problema está en cualquier celda del rango que no quede seleccionada.
  3. Alternativamente, presiona Ctrl+G → Especial → Fórmulas para resaltar cualquier celda con fórmula dentro del rango. Lo que aparezca ahí es tu problema.

En un modelo de P&L que extrae 1,200 filas de transacciones con una fórmula FILTER apuntando a 340 filas de salida, no vas a encontrar el bloqueante haciendo scroll. El método F5 lo ubica en 10 segundos.

En Google Sheets: fórmula MATCH para localizar el bloqueante

Google Sheets no tiene el menú Ir a Especial de Excel. El equivalente directo es esta fórmula, que devuelve la dirección exacta de la primera celda que bloquea la expansión en el rango objetivo:

=ADDRESS(ROW(C4) + MATCH(FALSE, ISBLANK(C4:C343), 0) - 1, COLUMN(C4))

Si el rango está limpio, devuelve un error (ninguna celda no vacía encontrada). Si devuelve una dirección de celda, esa es tu celda bloqueante. Navega directamente a ella.

Para un conteo rápido de cuántas celdas están bloqueando, el SUMPRODUCT de auditoría funciona de forma idéntica en Excel y en Sheets:

=SUMPRODUCT(--(NOT(ISBLANK('P&L'!C4:C343))))

Cero significa que el rango está limpio. Cualquier valor mayor que cero indica cuántos bloqueantes tienes. Ejecuta esta fórmula antes de anclar cualquier fórmula de expansión en una columna que heredaste de otro modelo.

5 causas de "Spill Range Isn't Blank" y cómo corregirlas

1. Fórmula que devuelve una cadena vacía

Una fórmula en otra parte del modelo pobló el rango objetivo con ="". Es común en modelos donde la lógica condicional vacía celdas para suprimir la visualización: =IF(DCF!$B$2="Final","Terminal Year",""). Cuando la condición cambia, la celda queda con "" en lugar de nada.

El escenario de los encabezados de períodos en el DCF aparece constantemente. Tienes 10 encabezados de años fiscales (FY2025 a FY2034) y alguien agregó un fallback con "" en la columna del año terminal. Luego intentas usar SEQUENCE en esa fila. SEQUENCE detecta 1 celda ocupada y se detiene. El mismo comportamiento ocurre en Sheets con ARRAYFORMULA o con las funciones de expansión nativa (FILTER, SORT, UNIQUE), disponibles de forma nativa desde 2023.

Solución: reemplaza los fallbacks ="" con =NA() y envuelve las fórmulas que los consumen en IFERROR. O elimina directamente la fórmula de las celdas que deberían estar vacías.

2. Caracteres invisibles

Pega datos de cualquier exportación de ERP (SAP, Workday, Oracle) y con frecuencia obtendrás espacios no separables (carácter Unicode 160) en celdas que no muestran nada. A simple vista parecen vacías. LEN() dice 1.

Solución en Excel: Inicio → Buscar y reemplazar. En el campo Buscar, mantén presionado Alt y escribe 0160 en el teclado numérico. Reemplaza todo con nada. Si no lo captura, copia un espacio de una de las celdas sospechosas y pégalo directamente en el campo de búsqueda.

Solución en Sheets: usa Edición → Buscar y reemplazar con la casilla "Buscar usando expresiones regulares" activada. Escribe \xA0 en el campo de búsqueda (código regex del Unicode 160) y reemplaza con nada.

3. Celdas fusionadas

Si alguna celda en la ruta de expansión pertenece a un rango fusionado, Excel trata toda la fusión como ocupada. Aparece en modelos de DCF donde alguien fusionó la fila de encabezados a lo largo de 10 columnas de años fiscales y luego intentó usar SEQUENCE debajo. La fusión termina en la columna K, pero la ruta de expansión sigue pasando por el área lógica de esa fusión. Google Sheets presenta el mismo comportamiento.

Solución en Excel: selecciona el área fusionada → Inicio → Combinar y centrar → Separar celdas. Luego ajusta la alineación horizontal de forma manual.

Solución en Sheets: selecciona el área fusionada → Formato → Combinar celdas → Deshacer combinación.

4. Formato fantasma

Las celdas que se limpian con la tecla Supr (en lugar de clic derecho → Borrar todo) pueden conservar formato que las marca como no vacías en casos límite. Es menos frecuente, pero vale la pena revisarlo cuando las otras causas no explican el problema.

Solución: selecciona todo el rango sospechoso → Inicio → Borrar → Borrar todo (Excel), o Edición → Eliminar valores (Sheets).

5. Salida de otro arreglo dinámico activo

Dos fórmulas de arreglo dinámico no pueden compartir el mismo espacio de salida. Si una SEQUENCE en 'Análisis de Retornos'!C4:C43 ya ocupa ese rango, una segunda fórmula que apunte a la misma área generará #SPILL! en Excel o #REF! en Sheets.

Solución: mueve una de las fórmulas. No existe forma de que coexistan; necesitan áreas separadas.

Google Sheets: diferencias clave respecto a Excel

Si conviertes un LBO o un DCF de Excel a Google Sheets, el diagnóstico es el mismo pero el contexto cambia en tres puntos importantes.

Tabla comparativa de comportamiento:

ComportamientoExcel 365Google Sheets
Código de error#SPILL!#REF!
Mensaje de error"Spill range isn't blank""Array result was not expanded because it would overwrite data"
Función envolvente necesariaNo: los arreglos dinámicos se expanden de forma nativaARRAYFORMULA sigue siendo necesaria para la mayoría de funciones
FILTER / SORT / UNIQUEExpansión nativaExpansión nativa desde 2023
Fórmula con "" bloqueaSíSí
Celdas fusionadas bloqueanSíSí
Diagnóstico con ISBLANKFuncionaFunciona de forma idéntica

La trampa de las columnas auxiliares en la conversión: los modelos de Excel suelen usar ="" en columnas auxiliares para suprimir la visualización sin eliminar los valores. En Excel, esas columnas pueden quedar fuera de la ruta de expansión porque la SEQUENCE o FILTER apunta a un área diferente. Cuando conviertes a Sheets y reescribes las fórmulas, el ARRAYFORMULA puede quedar alineado sobre esas mismas celdas con ="". Verifica todas las columnas auxiliares con LEN()=0 Y ISBLANK()=FALSE antes de dar la conversión a Sheets por finalizada.

Cómo prevenir el error "Spill Range Isn't Blank" antes de que ocurra

La regla es simple: cualquier celda que deba estar vacía tiene que estarlo de verdad. Nada de ="", nada de =IF(x,"",y). Si necesitas suprimir la visualización de forma condicional, usa =IF(x, valor, NA()) y envuelve la fórmula que lo consume en IFERROR.

En modelos con múltiples pestañas y varios arreglos dinámicos (una pestaña de retornos con SEQUENCE para los encabezados de períodos, una pestaña de flujo de caja con FILTER para extraer del registro de transacciones), el SUMPRODUCT de auditoría pertenece a una fila de revisión al final de cada pestaña. Conéctalo a un formato condicional para que se torne rojo cuando sea distinto de cero:

=SUMPRODUCT(--(NOT(ISBLANK('Análisis de Retornos'!C4:C343))))

Si ModelMonkey forma parte de tu flujo de trabajo, ejecuta una verificación de celdas antes de escribir en cualquier rango: identifica las celdas no vacías en el destino antes de ejecutar la escritura, no después. Eso captura el problema de ="" en el momento en que causaría el error de expansión, no cuando ya estás depurando el informe para la junta la mañana en que debe entregarse.

Para más detalles sobre lo que Excel bloquea específicamente dentro de tablas estructuradas, consulta Fórmulas de arreglos expandidos no admitidas en tablas de Excel.


Preguntas frecuentes

¿Por qué aparece #SPILL! si la celda del rango parece estar completamente vacía?

Porque Excel verifica el estado real de la celda, no su apariencia visual. Una celda que contiene ="", un espacio (Unicode 32) o un espacio no separable (Unicode 160) devuelve FALSE en ISBLANK() aunque no muestre nada. Eso es suficiente para bloquear la expansión.

¿Cómo encuentro la celda bloqueante en Google Sheets sin el menú F5 de Excel?

Usa esta fórmula auxiliar en cualquier celda libre: =ADDRESS(ROW(C4) + MATCH(FALSE, ISBLANK(C4:C343), 0) - 1, COLUMN(C4)). Ajusta el rango a tu ruta de salida real. Devuelve la dirección exacta de la primera celda que bloquea la expansión.

¿Las celdas fusionadas siempre causan #SPILL!?

Sí, si alguna celda del rango fusionado queda dentro de la ruta de salida. Excel y Sheets tratan toda la fusión como una unidad ocupada, incluso si visualmente el área parece libre. La única solución es desfusionar.

¿Qué diferencia hay entre #SPILL! en Excel y #REF! en Google Sheets?

Son el mismo problema con distinto código de error. En Excel 365 el error es #SPILL! con el mensaje "Spill range isn't blank". En Sheets el error es #REF! con el mensaje "Array result was not expanded because it would overwrite data". El diagnóstico con ISBLANK() y el SUMPRODUCT de auditoría funcionan de forma idéntica en ambas plataformas.

¿Cómo evito que un IF con "" bloquee mis fórmulas de arreglo dinámico?

Reemplaza =IF(condición, valor, "") por =IF(condición, valor, NA()) en todas las celdas que puedan quedar en la ruta de expansión de tus arreglos. Luego envuelve las fórmulas que consuman ese resultado en IFERROR. Así la celda queda con #N/A cuando la condición no se cumple, lo que no bloquea la expansión, y el IFERROR maneja el error aguas abajo de forma limpia.