Excel: numerazione automatica in colonna A basata sui valori (anche duplicati) di colonna E

Vuoi assegnare numeri consecutivi in colonna A partendo dai valori della colonna E (anche se ripetuti), lasciando vuote le righe dove E è vuota o 0 e bloccando la sequenza a 30 elementi? Qui trovi la soluzione pronta all’uso, compatibile e spiegata passo‑passo.

Indice

Scenario e obiettivo

Hai un elenco di chiavi o etichette in E5:E34. Ogni volta che compare un nuovo valore in E, vuoi assegnargli un numero progressivo (1, 2, 3, …). Se lo stesso valore si ripete in righe successive, deve ricevere lo stesso numero della prima occorrenza. Se E è vuota o contiene 0, la cella corrispondente in A deve rimanere vuota. Facoltativamente, vuoi anche limitare la numerazione a 30 gruppi.

Preparazione del foglio

  • Intesta le colonne nella riga 4 (ad esempio A4 = “Gruppo”, E4 = “Valore”).
  • Inserisci i dati (o le formule che li producono) nell’intervallo E5:E34.
  • Applicherai la formula a partire da A5 e la copierai fino a A34.
  • È importante bloccare con $ i riferimenti all’area “sopra la riga corrente” (ad es. $E$4:$E4, $A$4:$A4), così la ricerca e il conteggio coinvolgono solo le righe precedenti.

Formula base: numerazione dinamica con duplicati

La seguente formula assegna numeri progressivi alle occorrenze nuove in colonna E e ripete lo stesso numero per i duplicati già apparsi più in alto. Le celle restano vuote se E è vuota.

=IF($E5="", "",
    IF(COUNTIF($E$4:$E4, $E5)>0,
       XLOOKUP($E5, $E$4:$E4, $A$4:$A4),
       MAX($A$4:$A4)+1))

Come applicarla: inserisci la formula in A5 e copia in basso fino a A34.

Come funziona, riga per riga

  • IF($E5="", "") – Se la cella della colonna E, nella stessa riga, è vuota, anche A resta vuota.
  • COUNTIF($E$4:$E4, $E5)>0 – Verifica se il valore corrente di E è già apparso in una riga precedente.
  • XLOOKUP($E5, $E$4:$E4, $A$4:$A4) – Se sì, recupera il numero già assegnato alla prima occorrenza del valore.
  • MAX($A$4:$A4)+1 – Se è un valore nuovo, prende il massimo fin qui assegnato e aggiunge 1, generando la nuova etichetta numerica.

Perché è robusta

  • Compatibilità: metodo riga‑per‑riga, non richiede funzioni complesse di matrice dinamica.
  • Stabilità: i duplicati ereditano il numero dalla prima occorrenza “sopra”.
  • Chiarezza: nessuna colonna di supporto obbligatoria.

Ignorare gli zeri

Se vuoi che anche gli zeri si considerino “da ignorare” (come vuoto), usa una delle due varianti in base alla natura dei dati in E.

Valori digitati a mano in colonna E

=IF($E5=0, "",
    IF(COUNTIF($E$4:$E4, $E5)>0,
       XLOOKUP($E5, $E$4:$E4, $A$4:$A4),
       MAX($A$4:$A4)+1))

Colonna E ottenuta da formule (può restituire stringa vuota “” o 0)

=IF(OR($E5={"",0}), "",
    IF(COUNTIF($E$4:$E4, $E5)>0,
       XLOOKUP($E5, $E$4:$E4, $A$4:$A4),
       MAX($A$4:$A4)+1))

Questa versione copre entrambe le evenienze: la tua formula in E potrebbe restituire "" (stringa vuota) o 0. In entrambi i casi, A rimane vuota.

Limitare la numerazione a 30

Se vuoi bloccare la numerazione a 30 gruppi (cioè non assegnare numeri oltre 30), avvolgi la logica in LET come segue:

=LET(
   n, IF(COUNTIF($E$4:$E4,$E5)>0,
         XLOOKUP($E5,$E$4:$E4,$A$4:$A4),
         MAX($A$4:$A4)+1),
   IF(OR($E5={"",0}, n>30), "", n))

Come funziona: calcola il numero candidato n; poi, se E è vuota/0 oppure se n eccede 30, restituisce vuoto; altrimenti restituisce n. Puoi cambiare 30 con qualunque altro limite.

Versioni precedenti senza XLOOKUP

Se non hai XLOOKUP, puoi sostituirlo con INDEX/MATCH mantenendo intatta la logica:

=IF($E5="", "",
    IF(COUNTIF($E$4:$E4, $E5)>0,
       INDEX($A$4:$A4, MATCH($E5, $E$4:$E4, 0)),
       MAX($A$4:$A4)+1))

La numerazione resta identica: si cerca il valore in $E$4:$E4 e si prende il corrispondente numero da $A$4:$A4.

Approccio alternativo con funzioni dinamiche (Excel 365)

Se usi una versione moderna (Microsoft 365) e ti va bene usare formule di matrice dinamica, puoi “mappare” ogni valore unico di E a una posizione nell’elenco degli unici, ottenendo il numero di gruppo con XMATCH. Questo rende i numeri indipendenti dall’ordine delle righe (cioè 1 corrisponde al primo valore unico in E, 2 al secondo, ecc.).

=LET(
   rng, $E$5:$E$34,
   unici, FILTER(UNIQUE(rng), (rng<>"")*(rng<>0)),
   IF(OR($E5={"",0}), "", XMATCH($E5, unici))
)

Nota: questa impostazione assegna i numeri in base all’ordine degli elementi unici, non necessariamente alla prima occorrenza “sopra”. Se desideri la compatibilità massima e il comportamento “a scorrimento riga‑per‑riga”, resta sulla soluzione precedente.

Esempio completo di utilizzo

Supponi di avere in E5:E14 i seguenti valori:

RigaE (Valore)A (Risultato atteso)
5Arancio1
6Mela2
7Arancio1
8
9Pera3
100
11Mela2
12Banana4
13Banana4
14Uva5

Con la formula “ignora 0”, ottieni in A i numeri 1,2,1, vuoto, 3, vuoto, 2, 4, 4, 5, come atteso.

Consigli pratici e personalizzazioni

  • Riga di intestazione: usare $A$4 come tetto superiore è comodo perché MAX($A$4:$A4) ritorna 0 quando sopra non c’è nulla di numerico. Assicurati che A4 sia vuota o 0.
  • Inizio da numeri diversi: per iniziare da 100, sostituisci MAX(...)+1 con IF(MAX($A$4:$A4)=0, 100, MAX($A$4:$A4)+1).
  • Sensibilità a maiuscole/minuscole: COUNTIF non distingue il case. Se “ABC” e “abc” devono essere considerati diversi, devi passare a strategie più avanzate (ad es. colonne d’appoggio con EXACT / IDENTICO).
  • Valori “zero” scritti come testo: se talvolta 0 è digitato come "0" (testo), puoi trattarlo come zero numerico con IF(OR($E5="", $E5=0, $E5="0"), "", ...).
  • Spazi indesiderati: per ignorare stringhe fatte solo di spazi, usa TRIM: IF(TRIM($E5)="", "", ...).
  • Prestazioni: evita riferimenti a colonne intere nei MAX/COUNTIF. Limita sempre l’intervallo alla parte “sopra” la riga corrente (come negli esempi).
  • Bloccare veramente i numeri: se vuoi “congelare” i risultati, alla fine copia la colonna A e incolla come valori.

Varianti avanzate con riferimenti dinamici “sopra riga”

Se vuoi che la formula resti valida anche se in futuro estendi l’elenco oltre la riga 34, puoi calcolare gli intervalli “fino alla riga precedente” con INDEX e LET:

=LET(
   prevE, $E$5:INDEX($E:$E, ROW()-1),
   prevA, $A$5:INDEX($A:$A, ROW()-1),
   IF(OR($E5={"",0}), "",
      IF(COUNTIF(prevE, $E5)>0,
         XLOOKUP($E5, prevE, prevA),
         MAX(prevA)+1)))

Così la formula è indipendente dai riferimenti a riga 4 e si adatta automaticamente man mano che aggiungi righe.

Domande frequenti

Cosa succede se ordino i dati?

Le formule riga‑per‑riga assegnano i numeri in base alla prima occorrenza sopra. Se riordini le righe, i numeri si ricalcolano coerentemente con il nuovo ordine. Se desideri numeri stabili per ogni valore indipendentemente dall’ordine, valuta l’approccio con UNIQUE/XMATCH mostrato sopra.

Posso usarla dentro una Tabella di Excel?

Sì, ma per riferirti “solo alle righe precedenti” è più semplice mantenere i riferimenti classici (A5, E5, ecc.). In alternativa, la variante con INDEX e ROW() crea un intervallo precedente che funziona bene anche nelle Tabelle.

Come gestisco errori in E (es. #N/A)?

Se un errore in E deve essere trattato come vuoto, avvolgi il controllo in IFERROR: IF(IFERROR($E5,"")="", "", ...).

La numerazione si ferma a 30 ma ho più di 30 gruppi

Puoi aumentare il limite nella formula LET(... n>30 ...) oppure rimuovere del tutto il controllo di soglia se non ti serve.

Traduzione delle funzioni per Excel in italiano

Se il tuo Excel usa i nomi funzione in italiano, ecco la mappatura più utile:

IngleseItaliano
IFSE
COUNTIFCONTA.SE
XLOOKUPCERCA.X
INDEXINDICE
MATCHCONFRONTA
MAXMAX
LETLET
UNIQUEUNICI
FILTERFILTRO
XMATCHCONFRONTA.X
TRIMANNULLA.SPAZI
IFERRORSE.ERRORE
EXACTIDENTICO

Di seguito le versioni localizzate delle formule principali (ricorda che in italiano gli argomenti sono separati da ;).

Base (salta celle vuote)

=SE($E5=""; "";
    SE(CONTA.SE($E$4:$E4; $E5)>0;
       CERCA.X($E5; $E$4:$E4; $A$4:$A4);
       MAX($A$4:$A4)+1))

Ignora anche 0

=SE(O($E5="";$E5=0); "";
    SE(CONTA.SE($E$4:$E4; $E5)>0;
       CERCA.X($E5; $E$4:$E4; $A$4:$A4);
       MAX($A$4:$A4)+1))

Limite a 30

=LET(
   n; SE(CONTA.SE($E$4:$E4; $E5)>0;
         CERCA.X($E5; $E$4:$E4; $A$4:$A4);
         MAX($A$4:$A4)+1);
   SE(O($E5="";$E5=0; n>30); ""; n))

Risoluzione dei problemi comuni

  • La prima riga numerata non parte da 1: verifica che $A$4 sia vuota (o 0) e che non ci siano numeri nelle righe sopra.
  • Duplicati non riconosciuti: potrebbero esserci spazi o differenze di formattazione (es. “Mela ” con spazio finale). Usa TRIM/ANNULLA.SPAZI o UPPER/MAIUSC su E.
  • Lo zero viene numerato: passa alla variante con OR($E5={"",0})/O($E5="";$E5=0).
  • Ho più di 30 gruppi: modifica la soglia n>30 oppure rimuovila.
  • Uso Excel 2016/2019: preferisci la versione INDEX/MATCH al posto di XLOOKUP.

Bozza di procedura rapida

  1. In A5 incolla la formula base (o la variante che ignora 0).
  2. Copia in basso fino ad A34.
  3. Se necessario, applica la versione con LET per limitare a 30.
  4. Controlla che E non contenga spazi o “0” testuali non voluti.
  5. Quando soddisfatto, valuta l’incolla come valori per “congelare” i numeri.

Perché questa soluzione è ideale per la maggior parte dei casi

Con una singola formula riga‑per‑riga ottieni una mappatura stabile tra valori (E) e gruppi numerici (A), evitando colonne d’appoggio e mantenendo compatibilità con più versioni di Excel. Le estensioni per ignorare 0 e per fissare un tetto di 30 coprono gli scenari tipici in contesti produttivi (report, pivot di raggruppamento, filtri). Se hai Microsoft 365, la variante con UNIQUE/XMATCH offre anche una numerazione indipendente dall’ordinamento.


Formula “pronta e definitiva” consigliata (ignora vuoto e 0, numerazione riga‑per‑riga, compatibile, con tetto a 30 modificabile):

=LET(
   n, IF(COUNTIF($E$4:$E4,$E5)>0,
         XLOOKUP($E5,$E$4:$E4,$A$4:$A4),
         MAX($A$4:$A4)+1),
   IF(OR($E5={"",0}, n>30), "", n))

Se non ti serve il tetto, elimina la condizione n>30 dal secondo IF/SE.


Suggerimento finale: se in futuro dovrai espandere l’intervallo oltre A34/E34, passa alla variante “avanzata” con INDEX nei riferimenti “precedenti” così la formula si adatterà automaticamente, o racchiudi tutto in un Nome definito per riutilizzarlo rapidamente in altri fogli.

Indice