Análise de dados

COUNTIF ARRAYFORMULA(MONTH()) no Google Sheets (2026)

ModelMonkey21 de junho de 20267 min de leitura

Esse padrão aparece o tempo todo em fechamentos mensais e análises de margem de contribuição: você tem um log de transações plano e precisa de contagens por mês sem criar colunas auxiliares nem exportar para uma tabela dinâmica.

Por que o COUNTIF rejeita MONTH() diretamente

O primeiro argumento do COUNTIF espera uma referência de intervalo, um bloco concreto de células como C2:C3001. Quando você passa MONTH(C2:C3001) sem o ARRAYFORMULA, o Google Sheets avalia o MONTH apenas contra a primeira célula do intervalo. O resultado é um único inteiro (o mês da linha 2), não um array, então o COUNTIF retorna 1 ou 0 dependendo se aquela data isolada coincide com o critério.

O ARRAYFORMULA força a avaliação em todo o intervalo antes que o COUNTIF o receba. O resultado é um array real em memória com inteiros de 1 a 12, e o COUNTIF faz a correspondência normalmente. Esse comportamento está documentado na referência de ARRAYFORMULA do Google Sheets.

Como usar COUNTIF com ARRAYFORMULA(MONTH()) para gerar contagens mensais

Para um único mês:

=COUNTIF(ARRAYFORMULA(MONTH(Transacoes!C2:C3001)), 3)

Para uma linha de resumo em um relatório para conselho ou investidores, onde B4:M4 contém os números de mês de 1 a 12:

=COUNTIF(ARRAYFORMULA(MONTH(Transacoes!$C$2:$C$3001)), B4)

Arraste para a direita até M4. Cada célula lê o número do mês da linha de cabeçalho e conta as transações correspondentes. Em 3.000 linhas, o recálculo de todos os 12 meses leva menos de um segundo.

Se você quiser os 12 valores a partir de uma única fórmula, sem arrastar, o COUNTIF não consegue iterar um array de critérios nativamente. Use MAP com LAMBDA, disponível no Google Sheets desde novembro de 2022 (conforme o Google Workspace Updates):

=MAP(ROW(INDIRECT("1:12")), LAMBDA(m,
  COUNTIF(ARRAYFORMULA(MONTH(Transacoes!$C$2:$C$3001)), m)
))

Essa fórmula derrama 12 valores verticalmente. Envolva com TRANSPOSE se o seu resumo estiver disposto na horizontal. Para planilhas em ambientes sem suporte ao MAP/LAMBDA, arraste a fórmula de mês único: menos elegante, porém mais fácil de auditar quando o CFO perguntar como o modelo foi construído.

Corrigindo o bug de células vazias em fórmulas COUNTIF ARRAYFORMULA MONTH

Este é um problema que corrompe silenciosamente os números de janeiro em todo modelo que usa intervalos abertos.

MONTH("") retorna 1. Cada célula em branco na coluna de datas é contada como janeiro. Em um intervalo de 3.000 linhas onde 2.000 ainda estão vazias (você está no Q1 do exercício fiscal de 2026, com dados até março), a contagem de janeiro fica inflada em 2.000.

A correção com COUNTIFS:

=COUNTIFS(
  ARRAYFORMULA(MONTH(Transacoes!C2:C3001)), 3,
  Transacoes!C2:C3001, "<>"
)

O segundo critério descarta as datas em branco antes que a correspondência de mês seja executada. A mesma abordagem funciona quando você arrasta a fórmula pelos 12 meses: basta travar as referências de intervalo e substituir o 3 fixo pela célula de cabeçalho do mês.

Você também pode suprimir os brancos dentro do próprio ARRAYFORMULA:

=COUNTIF(
  ARRAYFORMULA(IF(Transacoes!C2:C3001<>"", MONTH(Transacoes!C2:C3001), "")),
  3
)

As duas abordagens funcionam. A versão com COUNTIFS mantém a lógica de exclusão de brancos explícita e auditável, o que é importante quando alguém está rastreando uma variação inexplicável em janeiro.

SUMPRODUCT: quando migrar do COUNTIF ARRAYFORMULA

O SUMPRODUCT resolve o problema das células vazias e a extração do mês em uma única passagem, sem a camada intermediária do ARRAYFORMULA:

=SUMPRODUCT(
  (MONTH(Transacoes!$C$2:$C$3001)=3) *
  (Transacoes!$C$2:$C$3001<>"")
)

A performance é comparável para bases de dados com menos de 10.000 linhas. Acima de 50.000 linhas, o SUMPRODUCT tende a recalcular mais rápido porque evita materializar o array intermediário. De acordo com os limites de planilhas do Google Drive, o teto é 10 milhões de células por arquivo. Em logs de transação grandes, o SUMPRODUCT pode ser de 2 a 3 vezes mais rápido do que uma fórmula equivalente com COUNTIF e ARRAYFORMULA.

Para somar valores em vez de contar (receita por mês, não volume de transações):

=SUMPRODUCT(
  (MONTH(Transacoes!$C$2:$C$3001)=3) *
  (Transacoes!$C$2:$C$3001<>"") *
  Transacoes!$D$2:$D$3001
)

Onde a coluna D contém o valor de cada transação. Essa é a necessidade mais comum em FP&A: a contagem normalmente serve apenas como verificação de consistência sobre a soma.

AbordagemSeguro para células vazias?Derrama 12 meses?Melhor uso
COUNTIF(ARRAYFORMULA(MONTH()))Não (use COUNTIFS)Com MAP/LAMBDAContagem de transações, menos de 10k linhas
COUNTIFS(ARRAYFORMULA(MONTH()), ..., intervalo, "<>")SimNão (arrastar ou MAP)Contagens mensais auditáveis
SUMPRODUCT((MONTH()=m)*(intervalo<>""))SimNão (arrastar)Contagens ou somas, qualquer volume
MAP(ROW(INDIRECT("1:12")), LAMBDA(m, COUNTIF(...)))Depende da fórmula internaSimResumo de 12 meses para relatório de conselho

Integrando em um modelo com múltiplas abas

Em um relatório trimestral para conselho ou investidores, as contagens mensais alimentam uma aba de resumo que outras abas referenciam. Uma estrutura limpa:

Aba Transacoes (dados brutos): datas na coluna C, valores em D, SKU ou categoria em E.

Aba Resumo Mensal: números de mês de 1 a 12 em B5:B16, depois:

=COUNTIFS(
  ARRAYFORMULA(MONTH(Transacoes!$C$2:$C$3001)), $B5,
  Transacoes!$C$2:$C$3001, "<>",
  Transacoes!$E$2:$E$3001, 'DRE'!$C$2
)

Essa fórmula conta transações no mês $B5 cuja categoria corresponda ao valor da célula de premissas na aba DRE. A aba DRE então puxa:

=SUMIFS('Resumo Mensal'!D:D, 'Resumo Mensal'!B:B, ">=" & Premissas!$B$3)

Duas referências entre abas, todas travadas, sem colunas auxiliares. Altere a data de uma transação e a DRE se atualiza automaticamente. A trilha de auditoria vai dos dados brutos ao resumo mensal e daí à DRE, sem nada escondido em cache de tabela dinâmica.

Se você está integrando isso em um modelo existente e quer a fórmula escrita para o seu layout específico de abas e colunas, o ModelMonkey consegue ler a estrutura da sua planilha e escrever o padrão COUNTIFS ou SUMPRODUCT com as referências corretas já preenchidas, diretamente no Google Sheets.

Perguntas frequentes

Por que =COUNTIF(MONTH(C2:C100), 3) retorna 0 ou 1 em vez do total correto?

Sem o ARRAYFORMULA, o MONTH() avalia apenas a primeira célula do intervalo e retorna um único inteiro. O COUNTIF então compara esse inteiro único com o critério, produzindo 0 ou 1. A correção é =COUNTIF(ARRAYFORMULA(MONTH(C2:C100)), 3).

O COUNTIF ARRAYFORMULA MONTH conta células vazias como janeiro?

Sim. MONTH("") retorna 1, então qualquer célula em branco na coluna de datas incrementa a contagem de janeiro. Use COUNTIFS com um segundo critério "<>" para excluir os brancos, conforme mostrado na seção de correção de bug acima.

Qual é mais rápido: COUNTIF com ARRAYFORMULA(MONTH()) ou SUMPRODUCT?

Para menos de 10.000 linhas, a diferença é imperceptível. Acima de 50.000 linhas, o SUMPRODUCT costuma ser de 2 a 3 vezes mais rápido porque não materializa o array intermediário que o ARRAYFORMULA gera.

Posso usar essa fórmula para filtrar por mês e por categoria ao mesmo tempo?

Sim, com COUNTIFS. Adicione pares extras de intervalo e critério: =COUNTIFS(ARRAYFORMULA(MONTH(C2:C3001)), 3, C2:C3001, "<>", E2:E3001, "Serviços"). O COUNTIFS aceita quantos pares forem necessários, e o ARRAYFORMULA no primeiro par não interfere nos demais.

O MAP/LAMBDA funciona em todas as contas do Google Workspace?

Sim, desde novembro de 2022 para todas as edições do Google Workspace e contas pessoais do Google. Se a fórmula retornar erro #NOME?, confirme que não há espaço entre MAP e o parêntese de abertura, e que a planilha está com o idioma de funções configurado para inglês.