Excel: numeração automática na Coluna A a partir dos valores da Coluna E (PROCX + CONT.SES)

Aprenda a numerar automaticamente a Coluna A com base na Coluna E, sem macros e de forma robusta. A solução usa funções do Excel (PROCX, CONT.SES, SE, MÁXIMO) para criar rótulos sequenciais que se repetem quando o valor em E se repete e ficam em branco quando E está vazio ou igual a 0.

Índice

Visão geral do problema

Objetivo: preencher A5:A34 com uma numeração automática de 1 a 30, respeitando estas regras:

  1. Novo valor em E5:E34 → recebe o próximo número sequencial.
  2. Valor repetido nas linhas abaixo → repete o número já atribuído ao mesmo valor acima.
  3. E vazia ou 0 → a célula correspondente em A fica vazia.

Fórmula‑chave (pronta para uso)

Na célula A5, insira a fórmula abaixo e copie até A34:

=SE(OU($E5={"",0}); "";
     SE(CONT.SES($E$4:$E4; $E5)>0;
        PROCX($E5; $E$4:$E4; $A$4:$A4);
        MÁXIMO($A$4:$A4)+1))

O que cada parte faz

  • SE(OU($E5={"",0}); "") – mantém A5 vazia se E5 estiver vazia ou for 0 (funciona tanto com valores digitados quanto com resultados de fórmula).
  • CONT.SES($E$4:$E4; $E5) – verifica se o valor de E5 já surgiu acima.
  • PROCX($E5; $E$4:$E4; $A$4:$A4) – se já surgiu, devolve o mesmo número que você atribuiu antes.
  • MÁXIMO($A$4:$A4)+1 – se é um valor inédito, cria o próximo número sequencial.

Dica de compatibilidade: se os valores em E forem sempre digitados (e não resultados de fórmula), pode simplificar a primeira condição para $E5=0. A versão recomendada (OU($E5={"",0})) é mais abrangente.

Passo a passo rápido

  1. Confirme que o intervalo E5:E34 terá no máximo 30 entradas relevantes.
  2. Selecione A5 e cole a fórmula acima.
  3. Copie (ou arraste) a fórmula de A5 até A34.
  4. Teste: insira alguns valores em E (misture novos e repetidos, alguns zeros e células vazias) e observe a numeração em A.

Exemplo prático

Suponha a seguinte lista na Coluna E:

LinhaE (valor)A (resultado esperado)Motivo
5AB1231Primeira ocorrência → inicia sequencial
6AB1231Repetição → repete o número já atribuído
70(vazio)Zero → A fica em branco
8CD9992Novo valor → próximo número livre
9(vazio)(vazio)Sem dado → A vazia
10EF7773Novo valor → próximo número livre
11CD9992Repetição → reutiliza o número do item “CD999”

Por que funciona

A técnica implementa um mapeamento estável valor → número. A primeira vez que o valor aparece, a fórmula calcula MÁXIMO dos números já emitidos e soma 1. Quando o mesmo valor reaparece, a busca por PROCX retorna o mesmo número atribuído originalmente. Assim você tem rótulos sequenciais consistentes, sem lacunas indevidas e sem numerar linhas sem dados.

Tabela de referência — como a solução se desenrola

EtapaObjetivoFunçãoObservação
1Ignorar linhas vazias/zeroSE + OUEvita numeração de linhas irrelevantes
2Detectar se já apareceu acimaCONT.SESConta ocorrências de E nas linhas anteriores
3Reusar o número já emitidoPROCXBusca o rótulo atribuído ao mesmo valor
4Gerar novo rótulo sequencialMÁXIMO + 1Garante sequência contínua: 1, 2, 3, …

Compatibilidade e versões do Excel

  • Excel 365 / Microsoft 365: suporta PROCX, ÚNICO, SEQUÊNCIA, LET (recomendado).
  • Excel 2016/2019: não possui PROCX. Use a alternativa com ÍNDICE + CORRESP mostrada abaixo.
  • Separador de argumentos: em ambientes lusófonos, normalmente é ; (ponto e vírgula). Se o seu Excel usar ,, ajuste as fórmulas.

Alternativa sem PROCX (Excel sem XLOOKUP)

Substitua apenas a parte da busca por ÍNDICE + CORRESP:

=SE(OU($E5={"",0}); "";
     SE(CONT.SES($E$4:$E4; $E5)>0;
        ÍNDICE($A$4:$A4; CORRESP($E5; $E$4:$E4; 0));
        MÁXIMO($A$4:$A4)+1))

O comportamento permanece idêntico: valores repetidos herdam o mesmo número; novos valores recebem o próximo número sequencial.

Versão mais legível com LET

Para facilitar manutenção e leitura, crie variáveis nomeadas com LET:

=LET(
   e; $E5;
   acimaE; $E$4:$E4;
   acimaA; $A$4:$A4;
   SE(OU(e={"",0}); "";
      SE(CONT.SES(acimaE; e)>0;
         PROCX(e; acimaE; acimaA);
         MÁXIMO(acimaA)+1)))

Fórmula única (derrama) para preencher todo o intervalo

Se preferir uma única fórmula que devolva a numeração inteira de uma vez, use arrays dinâmicos (Excel 365). Insira em A5 e confirme:

=LET(
   r; $E$5:$E$34;
   valid; FILTRAR(r; (r<>"")*(r<>0));
   u; ÚNICO(valid);
   nums; SEQUÊNCIA(LINHAS(u));
   SE((r="")+(r=0); ""; PROCX(r; u; nums))
)

Como funciona:

  • FILTRAR remove vazios e zeros.
  • ÚNICO gera a lista de valores distintos na ordem de aparecimento.
  • SEQUÊNCIA cria os rótulos 1, 2, 3, … alinhados com u.
  • PROCX mapeia cada item de r para seu rótulo correspondente, devolvendo vazio para zeros ou células vazias.

Adaptações frequentes

CenárioAjuste sugeridoExemplo/Observação
Mais de 30 linhasExpanda as referências fixas de $A$4:$A4 e $E$4:$E4 para cobrir o novo alcance.Ex.: até A104 → manter âncoras na linha anterior de cada célula.
Quer aplicar em outra colunaTroque $A por a coluna destino e $E pela coluna fonte.Ex.: numerar em C com base em G.
Entrada pode conter espaços ou valores como textoPadronize a Coluna E antes: use uma coluna auxiliar com VALOR (para números) ou funções de limpeza de texto.Depois, a fórmula principal referencia a coluna já “limpa”.
Ignorar um marcador específico além de 0Adicione condição em OU().Ex.: ignorar “N/A” → OU($E5={"",0;"N/A"}).
Manter numeração fixa após editar EConverta o resultado em valores.Copie A5:A34 → Colar Especial > Valores.

Boas práticas para maior estabilidade

  • Âncoras corretas: nas expressões $E$4:$E4 e $A$4:$A4, a primeira referência é absoluta e a segunda é relativa. Isso é o que faz a “janela acima” evoluir linha a linha.
  • Evite lacunas acidentais: a lógica no topo da fórmula impede que linhas com E=0 ou vazias “consumam” números do sequencial.
  • Copiar‑colar intervalos: quando duplicar o layout para uma nova folha, ajuste as âncoras (linha 4) se a sua tabela começar noutro ponto.
  • Desempenho: mesmo em listas longas, as funções usadas são eficientes. Para milhares de linhas, prefira a versão com LET e, se possível, a abordagem “fórmula única”.

Testes de validação (recomendado)

  1. Entrada mista: crie uma sequência com valores novos, repetidos, zeros e vazios. Verifique se os números em A aumentam apenas diante de novos valores.
  2. Ordens diferentes: insira repetições espaçadas (ex.: linha 5, 17, 22). O número deve ser sempre o mesmo para o mesmo valor.
  3. Remoção de linhas: apague um valor de E que era inédito; a sequência ajusta sem “pular” números no meio, pois os rótulos dependem da posição e do histórico acima.

Solução completa com quadro de referência

RequisitoAbordagemFunções‑chaveNotas
Numerar apenas quando há dado relevanteCondição inicialSE, OUTrata vazios e zeros
Repetição herda o mesmo númeroChecagem e buscaCONT.SES, PROCXBusca o rótulo de cima
Novo valor recebe nº seguinteSequência incrementalMÁXIMOEvita colisões
Legibilidade e performanceVariáveis nomeadasLETFórmula mais clara e rápida
Preencher tudo de uma vezArray dinâmicoÚNICO, FILTRAR, SEQUÊNCIA, PROCXUma única fórmula “derrama” o resultado

Checklist de implementação

  • Confirme o intervalo de dados em E (linhas que realmente serão usadas).
  • Defina a linha de referência (neste guia, a linha 4) para construir as janelas “acima”.
  • Escolha a variação da fórmula (padrão, sem PROCX, com LET, ou derramamento).
  • Teste com entradas reais e dados de exceção (zeros, vazios, repetições distantes).
  • Se precisar congelar os números, conclua com Colar Especial > Valores.

Perguntas rápidas (FAQ)

Posso começar a numeração em outro número?
Sim. Troque MÁXIMO(...)+1 por MÁXIMO(...)+N (ex.: +10 para começar em 11) apenas na primeira linha (A5). As linhas seguintes herdarão a escala.

Há risco de “quebrar” a sequência se eu reordenar as linhas?
Sim: a lógica considera a ordem vertical (acima/abaixo). Se você ordena E, a numeração acompanhará a nova ordem. Para numeração permanente, converta as fórmulas em valores antes de reordenar.

E se existirem fórmulas em E que por vezes retornam texto, por vezes número?
A condição OU($E5={"",0}) já cobre a maioria dos casos. Se houver outros marcadores (ex.: “N/D”), acrescente‑os a OU().

Quero tratar os valores de forma case sensitive (diferenciar maiúsculas/minúsculas). É possível?
O CONT.SES e o PROCX comparam texto sem diferenciar maiúsculas de minúsculas. Para cenários sensíveis a maiúsculas, crie uma chave normalizada (por exemplo, anexando um código hash) numa coluna auxiliar e baseie a numeração nessa chave.

Resumo final (o essencial)

  • Use a fórmula base em A5 para numerar conforme os dados em E5:E34.
  • A numeração só avança com novos valores; repetições reutilizam o mesmo rótulo.
  • Linhas com E vazio ou 0 não recebem número.
  • Há versões para ambientes sem PROCX e também uma variante de array dinâmico.

Anexo: modelos prontos

Modelo padrão (copiar/colar em A5)

=SE(OU($E5={"",0}); "";
     SE(CONT.SES($E$4:$E4; $E5)>0;
        PROCX($E5; $E$4:$E4; $A$4:$A4);
        MÁXIMO($A$4:$A4)+1))

Modelo sem PROCX (Excel 2016/2019)

=SE(OU($E5={"",0}); "";
     SE(CONT.SES($E$4:$E4; $E5)>0;
        ÍNDICE($A$4:$A4; CORRESP($E5; $E$4:$E4; 0));
        MÁXIMO($A$4:$A4)+1))

Modelo com LET (mais limpo)

=LET(
   e; $E5;
   acimaE; $E$4:$E4;
   acimaA; $A$4:$A4;
   SE(OU(e={"",0}); "";
      SE(CONT.SES(acimaE; e)>0;
         PROCX(e; acimaE; acimaA);
         MÁXIMO(acimaA)+1)))

Modelo de fórmula única (derrama de A5 para baixo)

=LET(
   r; $E$5:$E$34;
   valid; FILTRAR(r; (r<>"")*(r<>0));
   u; ÚNICO(valid);
   nums; SEQUÊNCIA(LINHAS(u));
   SE((r="")+(r=0); ""; PROCX(r; u; nums))
)

Com essas variações, você cobre do Excel 365 ao 2016, em listas pequenas ou longas, preservando uma numeração que faz sentido de negócio e é fácil de manter.

Índice