A sintaxe é direta: =ARRAYFORMULA(IF(logical_array, value_if_true, value_if_false)). Cada argumento se expande automaticamente por quantas linhas os seus dados ocuparem. Essa expansão automática é o que torna essa função indispensável antes de construir qualquer modelo com mais de duas abas.
O padrão básico do ARRAYFORMULA(IF)
Comece com o guard de linha em branco. Sem ele, o ARRAYFORMULA avalia todas as células da coluna até a linha 50.000 em algumas configurações do Sheets, e você fica com 50.000 rótulos preenchendo a coluna. Isso quebra qualquer SUMIFS, COUNTIFS e tabela dinâmica que referencie essa coluna mais à frente.
=ARRAYFORMULA(
IF('DRE'!B2:B="", "",
IF('DRE'!B2:B="Receita", 'DRE'!C2:C * Premissas!$B$3, 0)
)
)
O IF externo protege as linhas em branco. O IF interno executa a lógica de fato. Esse padrão de duas camadas é a base de praticamente todo ARRAYFORMULA(IF) que você vai escrever em um modelo financeiro.
Um exemplo mais próximo da realidade: um modelo de margem de contribuição por SKU que sinaliza produtos onde a margem bruta caiu abaixo do piso aprovado pelo conselho, de 38,5%:
=ARRAYFORMULA(
IF('DRE'!A2:A="", "",
IF(('DRE'!C2:C - 'DRE'!D2:D) / 'DRE'!C2:C < Premissas!$B$7,
"Abaixo do Piso", "OK"
)
)
)
onde Premissas!$B$7 armazena o limite de 38,5%. Os SKUs sinalizados como "Abaixo do Piso" alimentam um COUNTIFS para a ponte de margem do relatório ao conselho. A referência permanece viva: ajuste o limite na aba Premissas e os sinalizadores se atualizam na hora.
Como aninhar lógica sem perder o fio da meada
O Google Sheets suporta até 64 níveis de IF aninhados, conforme documentado no Google Workspace Help Center (artigo "Google Sheets function list", consultado em julho de 2026). Para estruturas em faixas - faixas de comissão, classificação de território, faixas de drawdown - você empilha IF dentro de IF:
=ARRAYFORMULA(
IF('Vendas'!C2:C="","",
IF('Vendas'!C2:C >= Premissas!$B$3, "Faixa 1",
IF('Vendas'!C2:C >= Premissas!$B$4, "Faixa 2",
IF('Vendas'!C2:C >= Premissas!$B$5, "Faixa 3",
"Abaixo do Mínimo"
)
)
)
)
)
onde $B$3 = R$ 2,1 milhões, $B$4 = R$ 850 mil e $B$5 = R$ 250 mil são as metas de quota definidas na aba Premissas, para que o CFO possa ajustá-las sem tocar na lógica das fórmulas.
A função IFS seria mais limpa aqui. Mas, conforme o Google Sheets Help Center (artigo "IFS function", seção "Notes", consultado em julho de 2026), o IFS não suporta expansão em modo array: a função avalia apenas a primeira linha e retorna um escalar, não uma coluna. O SWITCH apresenta a mesma limitação. Se precisar de lógica com mais de quatro faixas, as alternativas práticas são IF aninhado ou uma tabela de referência consultada via ARRAYFORMULA(VLOOKUP()) ou ARRAYFORMULA(INDEX(MATCH())). A abordagem com lookup escala melhor para oito ou mais faixas e mantém a aba Premissas como fonte única da verdade.
Qual função expande dentro do ARRAYFORMULA?
A tabela abaixo resume o comportamento das funções mais comuns em contexto de array e indica a alternativa recomendada quando a expansão não é suportada:
| Função | Expande em ARRAYFORMULA | Alternativa recomendada |
|---|---|---|
| IF | Sim | - |
| IFS | Não (retorna escalar) | IF aninhado ou VLOOKUP/INDEX(MATCH) com tabela de faixas |
| SWITCH | Não (retorna escalar) | IF aninhado ou tabela de lookup |
| VLOOKUP (exato) | Sim | - |
| VLOOKUP (aproximado) | Comportamento imprevisível | INDEX(MATCH()) com correspondência exata |
| INDEX(MATCH()) | Sim | - |
| IFERROR | Sim (dentro do ARRAYFORMULA) | - |
| SUMIF / COUNTIF | Não se expandem como retorno; use como argumento | SUMIFS / COUNTIFS em coluna auxiliar |
Use essa tabela como referência rápida antes de encadear funções em um modelo novo. Salva um ciclo inteiro de depuração quando a fórmula retorna um escalar onde se esperava uma coluna.
Como tratar erros dentro do ARRAYFORMULA(IF)
Divisões, lookups e parsing de texto geram erros quando o denominador é zero, a chave de busca não existe ou a célula de origem está em branco. Dentro de um ARRAYFORMULA, uma linha com problema propaga o erro visualmente por toda a coluna. Envolva a operação problemática com IFERROR:
=ARRAYFORMULA(
IF('DRE'!B2:B="", "",
IFERROR(
('DRE'!C2:C - 'DRE'!D2:D) / 'DRE'!C2:C,
0
)
)
)
O posicionamento importa. O IFERROR fica dentro do ARRAYFORMULA, não ao redor dele. Envolver o ARRAYFORMULA inteiro com IFERROR converte todos os erros em 0, inclusive bugs de lógica que você precisaria ver durante a construção do modelo. Envolva apenas a operação específica que pode falhar.
Para cálculos de margem: receita igual a zero nos meses anteriores ao lançamento de um produto é uma fonte comum de divisão por zero. IFERROR(expr, 0) resolve, mas vale pensar se 0% de margem é semanticamente diferente de "sem dados" para o seu output. Em um modelo de 36 meses com 200 SKUs, essa distinção aparece nas médias móveis e na análise de coorte.
O que o ARRAYFORMULA(IF) não consegue fazer
Alguns comportamentos esperados simplesmente não funcionam dentro do ARRAYFORMULA:
IFS e SWITCH não se expandem em modo array. A fórmula avalia apenas a primeira linha e retorna um escalar, não uma coluna.
VLOOKUP com correspondência aproximada (range_lookup = TRUE) se comporta de forma imprevisível em contexto de array. Use INDEX(MATCH()) ou VLOOKUP com correspondência exata.
Saídas de múltiplas colunas a partir de um único branch do IF - o ARRAYFORMULA retorna uma coluna por fórmula. Se a lógica condicional precisar preencher colunas separadas de Receita, CMV e Margem Bruta, são três fórmulas distintas.
Funções voláteis dentro dos branches do IF - RAND(), NOW() e TODAY() dentro do ARRAYFORMULA recalculam a cada alteração na planilha. Em um modelo com 7.200 células atreladas a fórmulas de array, o atraso fica perceptível.
Desempenho em modelos grandes
Um modelo de DRE de 36 meses com 200 SKUs gera aproximadamente 7.200 células por coluna de fórmula. Isoladamente, isso não é problema. O recálculo fica lento quando você encadeia múltiplos outputs de ARRAYFORMULA, onde a fórmula A alimenta a B, que alimenta a C. Arrays encadeados multiplicam o custo de recálculo.
Dois ajustes práticos: calcule uma vez em uma coluna auxiliar e a referencie nas demais, e cristalize os períodos fechados com Colar especial como Valores quando o mês fechar e a lógica não mudar mais.
O ciclo de iteração do ARRAYFORMULA(IF) - escrever, checar vazamento em linhas em branco, depurar erros, ajustar a lógica e repetir - é onde o tempo no meio do trimestre vai embora. Escolha um plano do ModelMonkey, disponível tanto no Google Sheets quanto no Excel.
Perguntas frequentes
O IFS funciona dentro do ARRAYFORMULA?
Não. Conforme documentado no Google Sheets Help Center (artigo "IFS function", julho de 2026), o IFS não suporta expansão em modo array. Ao ser usado dentro de um ARRAYFORMULA, o IFS avalia apenas a primeira linha do intervalo e retorna um único valor para toda a coluna. A alternativa é IF aninhado ou uma tabela de lookup consultada via ARRAYFORMULA(INDEX(MATCH())).
Como evitar que o ARRAYFORMULA preencha linhas em branco com rótulos ou zeros?
Adicione um IF externo que verifica se a célula-âncora da linha está em branco: IF(A2:A="", "", ...). Esse guard deve ser o primeiro IF da fórmula. Sem ele, o ARRAYFORMULA avalia até a linha 50.000 em algumas configurações do Sheets, gerando uma coluna repleta de rótulos que quebra SUMIFS, COUNTIFS e tabelas dinâmicas à frente no modelo.
Qual o limite de IF aninhados no Google Sheets?
O Google Sheets suporta até 64 níveis de IF aninhados, conforme o Google Workspace Help Center (artigo "Google Sheets function list", julho de 2026). Na prática, a legibilidade se perde muito antes disso. Para estruturas com mais de quatro faixas, prefira uma tabela de referência consultada via ARRAYFORMULA(INDEX(MATCH())): a lógica fica na aba Premissas, não enterrada dentro de IFs encadeados.
O IFERROR deve ficar dentro ou fora do ARRAYFORMULA?
Dentro, envolvendo apenas a operação que pode falhar. =ARRAYFORMULA(IFERROR(expr, 0)) converte todos os erros em 0, inclusive bugs de lógica que você precisaria ver. O padrão correto é =ARRAYFORMULA(IF(A2:A="", "", IFERROR(operação_problemática, 0))), onde o IFERROR protege somente a operação específica - divisão por zero, lookup sem correspondência ou parsing de texto malformado.
Posso usar ARRAYFORMULA(IF) com referências entre abas?
Sim, sem restrições. As referências de intervalo funcionam normalmente em modo array: 'DRE'!C2:C, Premissas!$B$7. A única atenção é manter o guard de linha em branco baseado em uma coluna que sempre está preenchida quando há dados reais, normalmente a coluna de identificador ou descrição da linha.
Resumo
ARRAYFORMULA(IF) é o padrão central para lógica condicional em escala de coluna no Google Sheets: sempre proteja as linhas em branco com um IF externo, envolva apenas a operação problemática com IFERROR dentro do array, e use IF aninhado para lógica em múltiplas faixas, já que IFS e SWITCH não se expandem em modo array. Em modelos grandes, limite as dependências encadeadas entre ARRAYFORMULAs e cristalize os períodos fechados para manter o recálculo ágil.
Para uma visão mais ampla do que o ARRAYFORMULA oferece além da lógica condicional, consulte ARRAYFORMULA no Google Sheets: Guia para Modelos Financeiros.