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.
| Abordagem | Seguro para células vazias? | Derrama 12 meses? | Melhor uso |
|---|---|---|---|
COUNTIF(ARRAYFORMULA(MONTH())) | Não (use COUNTIFS) | Com MAP/LAMBDA | Contagem de transações, menos de 10k linhas |
COUNTIFS(ARRAYFORMULA(MONTH()), ..., intervalo, "<>") | Sim | Não (arrastar ou MAP) | Contagens mensais auditáveis |
SUMPRODUCT((MONTH()=m)*(intervalo<>"")) | Sim | Não (arrastar) | Contagens ou somas, qualquer volume |
MAP(ROW(INDIRECT("1:12")), LAMBDA(m, COUNTIF(...))) | Depende da fórmula interna | Sim | Resumo 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.