Análise de dados

Erro #SPILL! no Excel e Sheets: Causas e Correções

ModelMonkey25 de junho de 20269 min de leitura
#Mensagem do sub-erroGatilho comumExcelSheets
1Intervalo de spill não está vazioCélula com dados no caminho do array#SPILL! visívelSobrescreve silenciosamente
2Intervalo de spill é grande demaisResultado excede 1.048.576 linhas#SPILL!Erro apenas se a planilha encher
3Tamanho indeterminadoRAND() aninhado em array dinâmico#SPILL!Arrays voláteis funcionam normalmente
4Array dentro de Tabela (Ctrl+T)FILTER numa coluna de Tabela#SPILL!Sem equivalente (não existe objeto Tabela)
5Células mescladas no caminhoCabeçalho mesclado bloqueia o resultado#SPILL!Mesmo comportamento
6Sem memória disponívelArray de 500k linhas com 6 colunas#SPILL!Resultado parcial ou travamento da aba

Causa 1: O Intervalo de Spill Não Está Vazio

A causa mais comum no Excel. Uma célula no intervalo de saída contém dados, uma fórmula, um valor ou até um caractere de espaço, e o Excel se recusa a sobrescrevê-la.

Diagnóstico no Excel: Clique na célula com #SPILL! e selecione "Selecionar Células Obstrutoras" no menu suspenso do ícone de aviso. O Excel destaca exatamente o que está no caminho. Antes de excluir qualquer coisa, vá em Fórmulas > Rastrear Dependentes para mapear todas as fórmulas que referenciam aquela célula. Limpar um ='DRE'!B47 que alimenta o saldo inicial do fluxo de caixa anula a referência e faz o FCF fechar em zero.

No Sheets: Este erro não aparece. O array sobrescreve o conteúdo existente. Se você suspeitar que isso aconteceu, compare o histórico de versões (Arquivo > Histórico de versões) para ver se uma célula de premissa mudou de valor sem intervenção manual.

Causa 2: O Intervalo de Spill É Grande Demais

O resultado da fórmula ultrapassaria o limite da grade do Excel: 1.048.576 linhas por 16.384 colunas. Um FILTER que retorna todas as linhas não vazias de uma grande base de transações pode atingir esse limite.

Correção: Restrinja os critérios do filtro para que o resultado caiba dentro dos limites. =FILTER('Transações'!A:F, 'Transações'!C:C="T1 2026") retornando 18.000 linhas funciona bem. =FILTER('Transações'!A:F, 'Transações'!C:C<>"") em um razão de vários anos provavelmente não.

Causa 3: Tamanho de Spill Indeterminado

O Excel não consegue calcular o tamanho do resultado antes de avaliar a fórmula. Isso quase sempre significa que uma função volátil como RAND() ou RANDBETWEEN() está aninhada dentro de um array dinâmico: as dimensões do array dependem de um valor que muda a cada recálculo.

Correção no Excel: Substitua a função volátil por um valor de semente fixo, ou reestruture para separar a parte volátil da parte que retorna o array. No Sheets, este cenário não gera erro, mas cria arrays que recalculam constantemente, o que pode degradar o desempenho de modelos grandes.

Causa 4: Array Dinâmico Dentro de uma Tabela do Excel

Tabelas do Excel, objetos estruturados criados via Inserir > Tabela ou Ctrl+T, não suportam fórmulas de array dinâmico. Um FILTER, UNIQUE ou SORT dentro de uma coluna de Tabela retorna #SPILL! sempre. Isso pega muitos analistas que construíram modelos de comparáveis usando referências estruturadas de Tabela antes de 2019 e agora estão misturando estilos de fórmulas antigos e novos.

Correção: Mova a fórmula para um intervalo de células normal fora da Tabela, ou converta a Tabela em intervalo (Design da Tabela > Converter em Intervalo) antes de usar arrays dinâmicos.

O Sheets não tem esse problema porque não existe o conceito de objeto Tabela estruturado com as mesmas restrições. FILTER e UNIQUE funcionam dentro de qualquer intervalo formatado no Sheets.

Causa 5: Spill em Células Mescladas

Células mescladas bloqueiam o intervalo de spill da mesma forma que dados. É um problema frequente em templates de relatórios formatados onde cabeçalhos de seção abrangem várias colunas. Este comportamento é idêntico no Excel e no Sheets.

Correção: Desmescle as células bloqueantes. No Excel: Início > Mesclar e Centralizar > Desfazer Mesclagem de Células. Para centralizar visualmente sem bloquear fórmulas, use Formatar Células > Alinhamento > Centralizar nas Seleções. No Sheets: Formatar > Mesclar células > Desfazer mesclagem.

Causa 6: Sem Memória Disponível

O resultado da fórmula consumiria mais memória do que o Excel consegue alocar. Um FILTER que retorna 500.000 linhas com 6 colunas gera 3 milhões de células de uma vez, suficiente para esgotar a memória disponível, especialmente com outras pastas de trabalho grandes abertas.

Correção: Agregue antes de fazer o spill. Em vez de trazer todas as 500 mil linhas de transações para um array dinâmico, use SUMIFS para consolidar em um único valor por período:

=SUMIFS('Transações'!E:E, 'Transações'!C:C, ">=" & Premissas!$B$3,
         'Transações'!C:C, "<=" & Premissas!$B$4,
         'Transações'!D:D, Retornos!$B$7)

Se você realmente precisar do conjunto de dados completo no nível de linha, carregue-o no Power Query (Excel) ou no BigQuery via conector nativo (Sheets) e resuma os dados antes de chegarem à planilha.


Quando Não Há Erro Nenhum, mas os Números Estão Errados

Este é o cenário mais difícil, e acontece nas duas plataformas por motivos diferentes.

No Excel, existe uma versão sutil do problema: a fórmula não sinaliza #SPILL!, mas o array derrama em células que parecem vazias e não estão. Uma célula contendo ="", um artefato de formatação ou um zero mascarado por formatação personalizada pode bloquear um intervalo de spill em algumas versões do Excel, dependendo da ordem de recálculo. O modelo calcula, parece correto, mas a linha de receita de R$ 4,2 milhões na aba DRE está puxando de um valor que sobrescreveu uma premissa de período anterior.

No Sheets, não há nem o aviso: qualquer sobrescrita silenciosa por array dinâmico que invadir um bloco de premissas produz exatamente esse sintoma. Números errados, sem triângulo de erro, sem indicação de onde buscar.

Em ambos os casos, o ModelMonkey consegue identificar quais células em um intervalo de spill contêm conteúdo não-vazio invisível e rastrear quais fórmulas downstream elas alimentam. É particularmente útil quando você está 14 abas dentro de um modelo e algo está com R$ 2,3 milhões de diferença sem nenhum indicador de erro à vista.


Como Diagnosticar o #SPILL! no Excel em Menos de 30 Segundos

  1. Clique na célula com #SPILL!
  2. Clique no ícone de aviso na borda da célula
  3. Leia a mensagem do sub-erro: ela corresponde diretamente a uma das 6 causas acima
  4. Para a causa 1, selecione "Selecionar Células Obstrutoras" para ir direto às células bloqueantes
  5. Antes de limpar qualquer conteúdo, execute Fórmulas > Rastrear Dependentes na célula bloqueante

As causas 1 a 5 se resolvem em menos de um minuto quando você conhece o sub-erro. A causa 6 leva mais tempo porque é preciso identificar qual fórmula está consumindo memória em excesso.

Como Diagnosticar a Versão Silenciosa no Sheets

No Sheets, sem um erro visível, o processo de diagnóstico é diferente:

  1. Identifique qualquer premissa que mudou de valor sem intervenção manual (compare com a versão anterior do modelo ou com o documento de premissas)
  2. Localize todos os arrays dinâmicos nas abas adjacentes e verifique até quantas linhas cada um pode crescer
  3. Compare o intervalo de spill atual com o espaço disponível abaixo da fórmula
  4. Se um array cresceu além do buffer que havia antes, use Arquivo > Histórico de versões para confirmar quando e qual célula foi afetada

A lição prática: se você usa Sheets em modelos financeiros, o histórico de versões não é opcional. É o único mecanismo de auditoria disponível para sobrescritas silenciosas.


Perguntas Frequentes

O que é o erro #SPILL! no Excel?

O #SPILL! é o erro retornado quando uma fórmula de array dinâmico (como FILTER, UNIQUE, SORT ou SEQUENCE) tenta escrever múltiplos resultados em um intervalo de células, mas pelo menos uma dessas células está bloqueada por conteúdo existente, por uma restrição da grade ou por uma limitação de memória. O Excel introduziu arrays dinâmicos no Microsoft 365 e, com eles, o comportamento de "spill" e o erro #SPILL! como mecanismo de proteção.

O Google Sheets tem o erro #SPILL!?

Não. Quando um array dinâmico tenta escrever em uma célula ocupada no Sheets, o comportamento padrão é sobrescrever o conteúdo existente sem qualquer aviso. Isso pode ser mais perigoso do que o #SPILL! do Excel: um dado sobrescrito silenciosamente é muito mais difícil de detectar do que um erro explícito. Em modelos financeiros com premissas fixas próximas a saídas dinâmicas, essa diferença de comportamento tem consequências diretas na confiabilidade dos números.

Como identificar qual célula está bloqueando o intervalo de spill no Excel?

Clique na célula com #SPILL!, depois clique no ícone que aparece na borda da célula. No menu, selecione "Selecionar Células Obstrutoras". O Excel destaca exatamente as células que estão impedindo o spill. Antes de limpar qualquer conteúdo, use Fórmulas > Rastrear Dependentes para entender o que depende das células bloqueantes.

Por que o erro #SPILL! aparece dentro de uma Tabela do Excel?

Tabelas do Excel (objetos criados via Ctrl+T) têm uma limitação documentada: não suportam fórmulas de array dinâmico em suas colunas. Um FILTER ou UNIQUE dentro de uma coluna de Tabela sempre retornará #SPILL!. A solução é mover a fórmula para um intervalo normal fora da Tabela, ou converter a Tabela em intervalo antes de usar arrays dinâmicos. O Sheets não tem esse problema.

Como usar o operador # para referenciar intervalos de spill no Excel?

Quando uma fórmula de array dinâmico escreve a partir de, por exemplo, a célula A2, você pode referenciar todo esse intervalo dinâmico em outras fórmulas usando A2#. Essa referência se expande e se contrai automaticamente conforme o spill cresce ou diminui, eliminando a necessidade de pré-alocar intervalos fixos como A2:A300 que quebram quando os dados excedem a alocação. O Sheets não tem o operador #.

Qual é a arquitetura de abas mais segura para evitar conflitos de spill no Excel e no Sheets?

Isolar todos os arrays dinâmicos (FILTER, SORT, UNIQUE, SEQUENCE) em uma aba de Staging dedicada, e fazer com que as abas do modelo (DRE, BP, DFC, FCFF) referenciem as saídas do Staging via lookups estáticos. Essa estrutura funciona nos dois ambientes, porque concentra todo o risco de spill num único lugar controlado e evita que arrays crescentes invadam blocos de premissas fixas, com ou sem um erro #SPILL! para sinalizar o problema.