Σ Fogli di calcolo

INDICE e CONFRONTA: ricerche flessibili in ogni foglio di calcolo

Come combinare INDICE e CONFRONTA per cercare in qualsiasi direzione, su due dimensioni e con più criteri, in Excel, LibreOffice Calc e Google Sheets.

Prima dell'arrivo di CERCA.X, chi aveva bisogno di ricerche più robuste di CERCA.VERT usava la coppia INDICE e CONFRONTA (INDEX e MATCH in inglese). Ancora oggi è la soluzione più portabile: funziona in tutte le versioni di Excel, in LibreOffice Calc e in Google Sheets, e un file costruito così si apre ovunque senza sorprese. Conviene capirla bene, perché ogni funzione presa da sola è semplice e la loro combinazione è molto potente.

Le due funzioni separate

INDICE: dammi l'elemento in quella posizione

=INDICE(intervallo; riga; [colonna])

INDICE restituisce il contenuto di una cella indicata per posizione. =INDICE(B2:B100; 5) restituisce il quinto valore dell'intervallo, cioè B6. Con un intervallo a due dimensioni si indicano riga e colonna: =INDICE(B2:M100; 5; 3) restituisce la cella alla quinta riga e terza colonna dell'intervallo.

Da sola sembra poco utile, perché di solito non sappiamo in che posizione si trova il dato. È qui che entra CONFRONTA.

CONFRONTA: dimmi in che posizione si trova

=CONFRONTA(valore; intervallo; [tipo])

CONFRONTA cerca un valore in un intervallo di una sola riga o colonna e restituisce la sua posizione, non il contenuto. Se in A2:A100 il codice «X-204» si trova nella cella A13, =CONFRONTA("X-204"; A2:A100; 0) restituisce 12.

Il terzo argomento ha lo stesso ruolo del quarto argomento di CERCA.VERT:

Tipo Comportamento Requisito
0 corrispondenza esatta nessuno
1 valore più grande minore o uguale ordine crescente
-1 valore più piccolo maggiore o uguale ordine decrescente

Se lo ometti vale 1, quindi per codici e nomi va sempre scritto 0.

La combinazione

Mettendo CONFRONTA dentro INDICE ottieni una ricerca completa: CONFRONTA trova la riga, INDICE restituisce il valore di quella riga nella colonna che ti serve.

=INDICE($D$2:$D$500; CONFRONTA(A2; $A$2:$A$500; 0))

Si legge così: «nella colonna dei prezzi, restituisci il valore alla stessa posizione in cui il codice di A2 compare nella colonna dei codici». Le due colonne sono indipendenti, quindi:

  • puoi cercare a sinistra, per esempio trovare un codice partendo da una descrizione;
  • puoi inserire o eliminare colonne nel mezzo senza rompere nulla;
  • l'intervallo di ricerca e quello di restituzione possono stare perfino in fogli diversi, purché abbiano la stessa altezza e partano dalla stessa riga.

Quest'ultimo punto è il vincolo da ricordare: se un intervallo parte dalla riga 2 e l'altro dalla riga 3, il risultato è sfasato di una riga e nessuno se ne accorge.

Ricerca a due dimensioni

INDICE accetta sia la riga sia la colonna, quindi due CONFRONTA permettono di cercare all'incrocio di una tabella. Supponi di avere i prodotti in A3:A40, i mesi in B2:M2 e le vendite in B3:M40:

=INDICE($B$3:$M$40; CONFRONTA(P2; $A$3:$A$40; 0); CONFRONTA(P3; $B$2:$M$2; 0))

Con il prodotto in P2 e il mese in P3 ottieni il valore corrispondente. Cambiando P2 o P3, per esempio tramite un elenco a discesa, costruisci in pochi minuti un piccolo pannello di consultazione.

Ricerca con più criteri

Un caso frequente: trovare il prezzo di un articolo per una certa taglia, dove nessuna delle due colonne da sola è univoca. Una soluzione pulita è creare una colonna di appoggio che unisce i due campi, per esempio in E2 =A2&"|"&B2, e poi cercare la chiave combinata:

=INDICE($D$2:$D$500; CONFRONTA(H2&"|"&H3; $E$2:$E$500; 0))

Il separatore | evita ambiguità: senza di esso «AB» + «C» e «A» + «BC» produrrebbero la stessa chiave. Nelle versioni recenti esistono soluzioni senza colonna di appoggio, basate su formule a matrice, ma la colonna esplicita ha un vantaggio: chiunque apra il foglio capisce come funziona la ricerca.

Usare CONFRONTA da solo

CONFRONTA è utile anche senza INDICE:

  • per verificare se un valore esiste in un elenco, con =VAL.NUMERO(CONFRONTA(A2; Elenco; 0)), che restituisce VERO o FALSO;
  • per rendere dinamico l'indice di colonna di un CERCA.VERT esistente, sostituendo il numero fisso con un CONFRONTA sulla riga delle intestazioni;
  • per trovare la posizione di un valore massimo, combinandolo con MAX: =CONFRONTA(MAX(B2:B50); B2:B50; 0).

Errori tipici

  • Dimenticare lo 0 in CONFRONTA, con risultati approssimati su dati non ordinati.
  • Intervalli di altezza diversa tra ricerca e restituzione.
  • Intervalli non bloccati, che scorrono quando copi la formula.
  • Dati non omogenei: numeri salvati come testo, spazi finali, caratteri invisibili.

Nel mio lavoro, quando devo consegnare un file a persone che usano software diversi, scelgo INDICE e CONFRONTA proprio per questo: è la soluzione con meno probabilità di dare sorprese.

In sintesi

  • CONFRONTA restituisce una posizione, INDICE il valore che si trova in quella posizione.
  • Insieme cercano in qualsiasi direzione e resistono all'inserimento di colonne.
  • Con due CONFRONTA si cerca all'incrocio di riga e colonna.
  • Per più criteri una colonna chiave con separatore è semplice e trasparente.
  • Funziona in ogni versione di Excel, in LibreOffice Calc e in Google Sheets.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche