Análise de dados

ARRAYFORMULA(IF) no Google Sheets: guia financeiro

ModelMonkey13 de julho de 20268 min de leitura

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çãoExpande em ARRAYFORMULAAlternativa recomendada
IFSim-
IFSNão (retorna escalar)IF aninhado ou VLOOKUP/INDEX(MATCH) com tabela de faixas
SWITCHNão (retorna escalar)IF aninhado ou tabela de lookup
VLOOKUP (exato)Sim-
VLOOKUP (aproximado)Comportamento imprevisívelINDEX(MATCH()) com correspondência exata
INDEX(MATCH())Sim-
IFERRORSim (dentro do ARRAYFORMULA)-
SUMIF / COUNTIFNão se expandem como retorno; use como argumentoSUMIFS / 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.