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.
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<>"")*(A3:A100<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; "<>")
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; "<>")=0; ""; MAXIFS(A3:A100; A3:A100; "<>"))
Excluindo a sentinela 31/12/9999
=IF(COUNTIFS(A3:A100; "<>"; A3:A100; "<"&DATE(9999;12;31))=0; "";
MAXIFS(A3:A100; A3:A100; "<>"; A3:A100; "<"&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<>""; A3:A100))
Para excluir a sentinela:
=MAX(IF((A3:A100<>"")*(A3:A100<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; "<>")
- 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; "<>")=0; "";
MAXIFS(D3:D100; A3:A100; F3; D3:D100; "<>"))
Com múltiplos critérios (ex.: ID = F3, Tipo = G3, Status = “Ativo”):
=IF(COUNTIFS(A3:A100; F3; B3:B100; G3; C3:C100; "Ativo"; D3:D100; "<>")=0; "";
MAXIFS(D3:D100; A3:A100; F3; B3:B100; G3; C3:C100; "Ativo"; D3:D100; "<>"))
Excluindo sentinela no mesmo cálculo:
=IF(COUNTIFS(A3:A100; F3; D3:D100; "<>"; D3:D100; "<"&DATE(9999;12;31))=0; "";
MAXIFS(D3:D100; A3:A100; F3; D3:D100; "<>"; D3:D100; "<"&DATE(9999;12;31)))
Alternativa compatível com versões antigas (matricial)
Equivalente matricial (Ctrl+Shift+Enter):
=MAX(IF((A3:A100=F3)*(D3:D100<>""); D3:D100))
Com critérios extras e sem sentinela:
=MAX(IF((A3:A100=F3)(B3:B100=G3)(C3:C100="Ativo")*
(D3:D100<>"")*(D3:D100<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<>""))
);
""
)
Com múltiplos critérios e sem sentinela:
=IFERROR(
MAX(
FILTER(D3:D100;
(A3:A100=F3)(B3:B100=G3)(C3:C100="Ativo")*
(D3:D100<>"")*(D3:D100<DATE(9999;12;31))
)
);
""
)
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:
- Converta sua base em Tabela (Ctrl+T) e dê nomes claros aos campos (ex.: ID, Tipo, Status, Data).
- Insira uma Tabela Dinâmica a partir dessa Tabela.
- Em Linhas, coloque ID, Tipo e/ou Status.
- Em Valores, arraste Data e altere a Função de Resumo para Máx.
- 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
ID | Tipo | Status | Data |
---|---|---|---|
1001 | A | Ativo | 15/02/2024 |
1001 | A | Ativo | |
1001 | B | Inativo | 31/12/9999 |
1002 | A | Ativo | 03/07/2025 |
1002 | A | Ativo | 22/05/2025 |
1003 | C | Ativo |
Maior data global ignorando vazios:
=MAX(FILTER(D2:D100; D2:D100<>"")) ⟶ 03/07/2025
Maior data global ignorando vazios e sentinela 9999:
=MAX(FILTER(D2:D100; (D2:D100<>"")*(D2:D100<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<>"")
(D2:D100<DATE(9999;12;31))));"") ⟶ 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
ouTexto para Colunas
. - Vazio real vs. texto vazio: resultados
""
são textos e já são ignorados porMAX
, 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 comIF
eCOUNTIFS
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:
- Selecione a Tabela → Dados > Do Intervalo/Tabela.
- No Power Query, filtre a coluna Data para remover vazios e (se necessário) remover
31/12/9999
. - Use Transformar > Agrupar Por: agrupe por ID/Tipo/Status, agregando Máximo da coluna Data.
- Carregue de volta para a planilha. Ao atualizar a base, clique em Atualizar e pronto.
Receitas prontas para copiar e colar
Cenário | Versão | Fórmula |
---|---|---|
Maior data (ignorar vazios) | 365/2021+ | =MAX(FILTER(A3:A100; A3:A100<>"")) |
Maior data (ignorar vazios) + vazio se nada | 365/2021+ | =IFERROR(MAX(FILTER(A3:A100; A3:A100<>"")); "") |
Maior data (ignorar vazios) | 2019+ | =MAXIFS(A3:A100; A3:A100; "<>") |
Maior data (ignorar vazios) + vazio se nada | 2019+ | =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 comIF
/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.