Excel: maior data ignorando vazios (MAXIFS, FILTER e alternativas)

Precisa encontrar a maior data real em um intervalo no Excel ignorando células vazias (e até “datas sentinela” como 31/12/9999)? Veja fórmulas prontas para cada versão (FILTER, MAXIFS e matriciais), exemplos com critérios por ID/Tipo/Status e alternativas com Tabela Dinâmica e Power Query.

Índice

Visão geral do problema

É comum querer a última data inserida em uma lista — por exemplo, a data mais recente de atualização de um registro, a última entrega de um pedido ou o fim mais recente de um contrato. Porém, quando o intervalo contém linhas sem data (vazias) ou valores de “data fictícia” (ex.: 31/12/9999 usado como “sem fim”), funções simples podem retornar resultados incorretos. Um caso típico: aplicar MAXIFS diretamente e obter uma data no ano 9999, “contaminando” o relatório.

A seguir você encontra abordagens confiáveis para obter a maior data válida, escolhendo conforme sua versão do Excel e a necessidade (com ou sem critérios adicionais). As fórmulas usam ponto e vírgula (;) como separador de argumentos, comum em ambientes lusófonos. Se o seu Excel usa , como separador, substitua ; por ,.


Sem critérios: apenas ignorar células vazias

Microsoft 365 / Excel 2021+ (com funções dinâmicas)

Remova vazios com FILTER e pegue a maior data com MAX:

=MAX(FILTER(A3:A100; A3:A100<>""))
  • FILTER elimina as células vazias; MAX retorna a maior entre as restantes.
  • Se todas as células puderem estar vazias, envolva com IFERROR para não exibir erro: =IFERROR(MAX(FILTER(A3:A100; A3:A100<>"")); "")

Excluindo datas sentinela (ex.: 31/12/9999)

=MAX(FILTER(A3:A100; (A3:A100&lt;&gt;&quot;&quot;)*(A3:A100&lt;DATE(9999;12;31))))

O produto lógico (...)*(...) força a entrada atender a ambas as condições: não vazio e menor que a data sentinela.

Excel 2019+ (tem MAXIFS)

Use um critério de “não vazio” diretamente no próprio intervalo:

=MAXIFS(A3:A100; A3:A100; &quot;&lt;&gt;&quot;)

Importante: quando não houver nenhuma célula válida, MAXIFS retorna 0 (que pode aparecer como 00/01/1900 com formatação de data). Para exibir vazio nesse caso, combine com COUNTIFS:

=IF(COUNTIFS(A3:A100; &quot;&lt;&gt;&quot;)=0; &quot;&quot;; MAXIFS(A3:A100; A3:A100; &quot;&lt;&gt;&quot;))

Excluindo a sentinela 31/12/9999

=IF(COUNTIFS(A3:A100; &quot;&lt;&gt;&quot;; A3:A100; &quot;&lt;&quot;&amp;DATE(9999;12;31))=0; &quot;&quot;;
   MAXIFS(A3:A100; A3:A100; &quot;&lt;&gt;&quot;; A3:A100; &quot;&lt;&quot;&amp;DATE(9999;12;31)))

Excel 2016 ou anterior (matricial – Ctrl+Shift+Enter)

Fórmula matricial clássica (confirme com Ctrl+Shift+Enter):

=MAX(IF(A3:A100&lt;&gt;&quot;&quot;; A3:A100))

Para excluir a sentinela:

=MAX(IF((A3:A100&lt;&gt;&quot;&quot;)*(A3:A100&lt;DATE(9999;12;31)); A3:A100))

Nas versões antigas, ao confirmar corretamente, você verá chaves {} aparecendo na barra de fórmulas.


Com critérios: maior data por ID/Tipo/Status (ignorando vazios)

Microsoft 365 / Excel 2019+ com MAXIFS

Exemplo: retornar a maior data em D3:D100 quando A3:A100 = F3, sem considerar vazios em D:

=MAXIFS(D3:D100; A3:A100; F3; D3:D100; &quot;&lt;&gt;&quot;)
  • O par (A…; F3) filtra pela chave/ID;
  • O par (D…; "<>") garante que apenas datas não vazias entrem no cálculo.

Exibir vazio quando não houver correspondência (em vez de 0/1900):

=IF(COUNTIFS(A3:A100; F3; D3:D100; &quot;&lt;&gt;&quot;)=0; &quot;&quot;;
   MAXIFS(D3:D100; A3:A100; F3; D3:D100; &quot;&lt;&gt;&quot;))

Com múltiplos critérios (ex.: ID = F3, Tipo = G3, Status = “Ativo”):

=IF(COUNTIFS(A3:A100; F3; B3:B100; G3; C3:C100; &quot;Ativo&quot;; D3:D100; &quot;&lt;&gt;&quot;)=0; &quot;&quot;;
   MAXIFS(D3:D100; A3:A100; F3; B3:B100; G3; C3:C100; &quot;Ativo&quot;; D3:D100; &quot;&lt;&gt;&quot;))

Excluindo sentinela no mesmo cálculo:

=IF(COUNTIFS(A3:A100; F3; D3:D100; &quot;&lt;&gt;&quot;; D3:D100; &quot;&lt;&quot;&amp;DATE(9999;12;31))=0; &quot;&quot;;
   MAXIFS(D3:D100; A3:A100; F3; D3:D100; &quot;&lt;&gt;&quot;; D3:D100; &quot;&lt;&quot;&amp;DATE(9999;12;31)))

Alternativa compatível com versões antigas (matricial)

Equivalente matricial (Ctrl+Shift+Enter):

=MAX(IF((A3:A100=F3)*(D3:D100&lt;&gt;&quot;&quot;); D3:D100))

Com critérios extras e sem sentinela:

=MAX(IF((A3:A100=F3)(B3:B100=G3)(C3:C100=&quot;Ativo&quot;)*
        (D3:D100&lt;&gt;&quot;&quot;)*(D3:D100&lt;DATE(9999;12;31)); D3:D100))

Versão moderna com FILTER + MAX (Microsoft 365/2021+)

Uma alternativa dinâmica elegante:

=IFERROR(
  MAX(
    FILTER(D3:D100; (A3:A100=F3)*(D3:D100&lt;&gt;&quot;&quot;))
  );
  &quot;&quot;
)

Com múltiplos critérios e sem sentinela:

=IFERROR(
  MAX(
    FILTER(D3:D100;
           (A3:A100=F3)(B3:B100=G3)(C3:C100=&quot;Ativo&quot;)*
           (D3:D100&lt;&gt;&quot;&quot;)*(D3:D100&lt;DATE(9999;12;31))
    )
  );
  &quot;&quot;
)

Resumo por grupos sem fórmulas complexas

Se o objetivo é retornar a maior data por ID/Tipo/Status para um relatório, a Tabela Dinâmica (PivotTable) faz isso sem fórmulas:

  1. Converta sua base em Tabela (Ctrl+T) e dê nomes claros aos campos (ex.: ID, Tipo, Status, Data).
  2. Insira uma Tabela Dinâmica a partir dessa Tabela.
  3. Em Linhas, coloque ID, Tipo e/ou Status.
  4. Em Valores, arraste Data e altere a Função de Resumo para Máx.
  5. Formate o campo de valores como Data.

Para excluir vazios ou sentinelas, aplique Filtro no campo Data da própria Tabela antes de criar a Tabela Dinâmica (ou use Filtro de Rótulo/Valores na TD).


Exemplo prático com dados de teste

IDTipoStatusData
1001AAtivo15/02/2024
1001AAtivo
1001BInativo31/12/9999
1002AAtivo03/07/2025
1002AAtivo22/05/2025
1003CAtivo

Maior data global ignorando vazios:

=MAX(FILTER(D2:D100; D2:D100&lt;&gt;&quot;&quot;))   ⟶  03/07/2025

Maior data global ignorando vazios e sentinela 9999:

=MAX(FILTER(D2:D100; (D2:D100&lt;&gt;&quot;&quot;)*(D2:D100&lt;DATE(9999;12;31))))  ⟶  03/07/2025

Maior data para ID = 1001, ignorando vazios e sentinela:

=IFERROR(MAX(FILTER(D2:D100; (A2:A100=1001)(D2:D100&lt;&gt;&quot;&quot;)
                               (D2:D100&lt;DATE(9999;12;31))));&quot;&quot;)  ⟶  15/02/2024

Boas práticas que evitam dor de cabeça

  • Use Tabelas estruturadas: converta a base com Ctrl+T e escreva fórmulas como =MAX(FILTER(Tabela1[Data]; Tabela1[Data]<>"")). Elas acompanham automaticamente novas linhas.
  • Cheque o tipo de dado: confirme que as “datas” são datas reais (número de série) e não texto. Se necessário, converta com DATEVALUE ou Texto para Colunas.
  • Vazio real vs. texto vazio: resultados "" são textos e já são ignorados por MAX, mas manter o critério "<>"/<>"" reforça a segurança.
  • Previna o 31/12/9999 na origem: se a base usa sentinela para “sem término”, considere substituir por vazio na importação ou filtrá-la explicitamente nas fórmulas (<DATE(9999;12;31)).
  • Desempenho: em bases grandes, prefira intervalos da Tabela (não colunas inteiras) e use MAXIFS quando disponível — costuma ser mais rápido que matrizes extensas.

Erros comuns e como resolver

  • Resultado 00/01/1900: ocorre quando a fórmula retorna 0 (sem correspondências). Solução: envolva com IF e COUNTIFS para exibir "" quando não houver linhas válidas.
  • #VALUE! em MAXIFS: geralmente por intervalos de tamanhos diferentes. Todos os ranges passados à função devem ter exatamente o mesmo número de linhas.
  • Datas como texto: se a célula está alinhada à esquerda e a fórmula ignora o valor, provavelmente é texto. Converta com DATEVALUE (ex.: =DATEVALUE("15/02/2024")) ou use Dados > Texto para Colunas.
  • Separador incorreto: se a fórmula não valida, seu Excel pode usar , no lugar de ;. Troque os separadores.
  • Filtro dinâmico “vazando”: FILTER gera uma matriz despejada. Garanta espaço livre abaixo/à direita da célula para não receber #SPILL!.

Power Query: alternativa sem fórmulas

Para relatórios recorrentes e bases muito grandes, o Power Query é robusto e automatizável:

  1. Selecione a Tabela → Dados > Do Intervalo/Tabela.
  2. No Power Query, filtre a coluna Data para remover vazios e (se necessário) remover 31/12/9999.
  3. Use Transformar > Agrupar Por: agrupe por ID/Tipo/Status, agregando Máximo da coluna Data.
  4. Carregue de volta para a planilha. Ao atualizar a base, clique em Atualizar e pronto.

Receitas prontas para copiar e colar

CenárioVersãoFórmula
Maior data (ignorar vazios)365/2021+=MAX(FILTER(A3:A100; A3:A100<>""))
Maior data (ignorar vazios) + vazio se nada365/2021+=IFERROR(MAX(FILTER(A3:A100; A3:A100<>"")); "")
Maior data (ignorar vazios)2019+=MAXIFS(A3:A100; A3:A100; "<>")
Maior data (ignorar vazios) + vazio se nada2019+=IF(COUNTIFS(A3:A100; "<>")=0; ""; MAXIFS(A3:A100; A3:A100; "<>"))
Maior data (ignorar vazios)2016 ou anterior=MAX(IF(A3:A100<>""; A3:A100)) (Ctrl+Shift+Enter)
Maior data por ID (ignorar vazios)2019+=MAXIFS(D3:D100; A3:A100; F3; D3:D100; "<>")
Maior data por ID (vazio se nada)2019+=IF(COUNTIFS(A3:A100; F3; D3:D100; "<>")=0; ""; MAXIFS(D3:D100; A3:A100; F3; D3:D100; "<>"))
Maior data por ID/Tipo/Status (sem sentinela)2019+=IF(COUNTIFS(A3:A100; F3; B3:B100; G3; C3:C100; "Ativo"; D3:D100; "<>"; D3:D100; "<"&DATE(9999;12;31))=0; ""; MAXIFS(D3:D100; A3:A100; F3; B3:B100; G3; C3:C100; "Ativo"; D3:D100; "<>"; D3:D100; "<"&DATE(9999;12;31)))
Maior data por ID (matricial)2016 ou anterior=MAX(IF((A3:A100=F3)*(D3:D100<>""); D3:D100)) (Ctrl+Shift+Enter)

Notas adicionais úteis

  • Datas “9999”: se a origem usa sentinela como 31/12/9999, adicione critério extra para excluí-la: =MAXIFS(D3:D100; A3:A100; F3; D3:D100; "<>"; D3:D100; "<"&DATE(9999;12;31))
  • Formatos regionais: a data DATE(9999;12;31) é independente de localidade; evite escrever "31/12/9999" diretamente como texto em critérios.
  • Formato das células: se o resultado aparecer como número (ex.: 45123), aplique formatação de Data.
  • Resultados vazios: lembre que "" não é uma data; se precisar realizar cálculos posteriores, trate o vazio com IF/IFERROR na etapa seguinte.

FAQ rápido

Posso usar colunas inteiras (A:A) em vez de A3:A100?
Pode, mas em livros grandes isso pode impactar desempenho, principalmente em versões antigas. Prefira Tabelas estruturadas ou intervalos delimitados.

Funciona no Google Sheets?
Sim, a lógica é a mesma (há MAXIFS e FILTER), mas lembre de usar , como separador e conferir as particularidades de datas da sua localidade.

O que fazer se a data vier como texto “2025-08-20”?
Converta antes com =DATEVALUE(A1) (ajuste para seu formato) ou use Dados > Texto para Colunas.


Resumo para escolher em segundos

  • Simples e moderno: =MAX(FILTER(A:A; A:A<>""))
  • Com critérios: =MAXIFS(maxrange; critrange1; crit1; max_range; "<>")
  • Versão antiga: =MAX(IF(range<>""; range)) (Ctrl+Shift+Enter)
  • Relatório por grupos: Tabela Dinâmica com Máx da coluna de Data

Conclusão

Ignorar vazios e sentinelas ao calcular a maior data é simples quando se usa o recurso certo para cada versão do Excel. Com FILTER + MAX (365/2021+), MAXIFS (2019+) ou as matriciais clássicas (2016-), você garante resultados corretos e relatórios confiáveis. Para resumos em larga escala, Tabela Dinâmica ou Power Query fecham o ciclo com precisão e desempenho.

Índice