Vai al contenuto principale

Excel INDIRECT(): come creare riferimenti dinamici nelle tue formule

Scopri come la funzione INDIRECT() di Excel trasforma il testo in riferimenti attivi. Impara a usarla per fogli dinamici, riferimenti di cella stabili, intervalli con nome e altro ancora.
· 8 min leggi

Scopri con l'IA

La funzione INDIRECT() è uno degli strumenti più potenti di Excel, ma spesso fraintesi. A differenza delle funzioni che eseguono calcoli direttamente, INDIRECT() converte stringhe di testo in riferimenti a celle attivi. Questo ti permette di creare formule dinamiche e flessibili che si adattano a input variabili. Che tu stia costruendo un cruscotto di riepilogo, facendo riferimento a fogli diversi in base alle selezioni dell’utente o cambiando dinamicamente i riferimenti di cella, INDIRECT() può fare la differenza.

In questa guida ti mostrerò come usare la funzione INDIRECT() per riferimenti a celle e come risolvere i problemi più comuni, incluso quando evitarne l’uso. Se ti mancano alcune basi, ti consiglio il nostro corso Introduction to Excel per costruire fondamenta solide. 

Cosa fa la funzione INDIRECT()

La funzione INDIRECT() in Excel recupera il valore di una cella o di un intervallo in base a un riferimento fornito come stringa di testo. Invece di inserire in modo statico un indirizzo di cella come "A1" in una formula, INDIRECT() ti consente di definire dinamicamente quell’indirizzo usando del testo, che Excel interpreta come riferimento attivo.

La sintassi della funzione INDIRECT() è mostrata di seguito:

INDIRECT(ref_text, [a1])

Dove:

  • ref_text (obbligatorio): Una stringa di testo che rappresenta un riferimento valido a cella o intervallo. Può riferirsi a una cella come "A1", a un intervallo con nome o anche a un riferimento su un altro foglio come "Sheet2!B5".

  • [a1]: Argomento facoltativo che specifica il tipo di riferimento in ref_text. Se a1 è TRUE o omesso, ref_text è interpretato come riferimento in stile A1. Se a1 è FALSE, ref_text è trattato come riferimento in stile R1C1.

Come usare la funzione INDIRECT()

Il seguente esempio mostra come la funzione INDIRECT() converta dinamicamente il testo in riferimenti di cella.

Supponi che la cella C2 contenga il testo "A2" e la cella A2 contenga il valore 100. Anche la funzione sotto restituirà 100 perché Excel legge il contenuto di C2 e INDIRECT() lo tratta come un riferimento.

=INDIRECT(C2)

Usare INDIRECT() per riferimenti basati su un'altra cella in Excel.

Uso di INDIRECT() per riferimenti basati su un’altra cella in Excel. Immagine dell’autore.

Se la cella A5 contiene il numero 5, puoi creare un riferimento dinamico con la formula seguente:

=INDIRECT("B"&A5)

Questa formula combina "B" con il valore in A5 (6), formando "B6". INDIRECT() restituisce quindi il valore nella cella B6, che è "Product A".

Uso di INDIRECT() con & per riferimenti dinamici in Excel.

Uso di INDIRECT() con & per riferimenti dinamici in Excel. Immagine dell’autore.

Usi dinamici di INDIRECT() in Excel

Il vero punto di forza della funzione INDIRECT() è la capacità di costruire riferimenti dinamici. Questo la rende ideale per modelli avanzati, dashboard e report guidati dall’utente. Di seguito tre casi d’uso chiave che ne mostrano la flessibilità.

Fare riferimento ad altri fogli di lavoro

Puoi usare INDIRECT() per recuperare dinamicamente dati da fogli diversi in base all’input di una cella. Ad esempio, se nella cella A1 hai il nome di un foglio, come "Sales". Vuoi recuperare il valore della cella B2 su quel foglio.

La formula seguente costruisce un riferimento come 'Sales'!B2 e restituisce il valore di quella cella.

=INDIRECT("'" & A1 & "'!B2")

Uso di INDIRECT() per riferirsi indirettamente ad altri fogli in Excel.

Uso di INDIRECT() per fare riferimento indirettamente ad altri fogli in Excel. Immagine dell’autore.

Racchiudi sempre i nomi dei fogli tra apici singoli usando ' se c’è la possibilità che contengano spazi o caratteri speciali, ad esempio 'Sales 2023'!A1.

Fare riferimento a intervalli con nome

Puoi anche usare la funzione INDIRECT() per fare riferimento dinamicamente a intervalli con nome, opzione molto potente se combinata con menu a discesa o input dell’utente.

Supponi di avere intervalli con nome, Sales_2023 e Sales_2023, dove la cella “A1” contiene "Sales_2023"

Assegnare nomi agli intervalli di celle in Excel.

Assegnare nomi agli intervalli di celle in Excel. Immagine dell’autore.

La formula seguente sommerà i valori nell’intervallo con nome Sales_2023, anche se non lo richiama direttamente. Questo metodo è ottimo per dashboard guidati dall’utente o modelli con più scenari.

=SUM(INDIRECT(A1))

Uso di INDIRECT() per fare riferimento a intervalli con nome in Excel.

Uso di INDIRECT() per fare riferimento a intervalli con nome in Excel. Immagine dell’autore.

Riferimenti fissi che non cambiano

Normalmente, se inserisci o elimini righe o colonne, i riferimenti nelle formule si adattano automaticamente. Ma la funzione INDIRECT() crea riferimenti assoluti che non si spostano.

Per esempio, se nella cella “A1” c’è 100, le formule =A1 e =INDIRECT("A1") restituiranno entrambe 100. Tuttavia, se sposti il valore

Riferimento diretto a cella in Excel.

Riferimento diretto a cella in Excel. Immagine dell’autore.

Uso di INDIRECT() per il riferimento a celle in Excel.

Uso di INDIRECT() per il riferimento a celle in Excel. Immagine dell’autore.

Tuttavia, se inserisci una nuova riga sopra la riga 1, D3 (che era B2) ora mostra =A3 poiché il valore si sposta con la riga. La cella E3 con la funzione INDIRECT() mostra ancora l’originale A2, che ora potrebbe essere vuoto o contenere un valore diverso (UID).

Uso di INDIRECT() per riferimenti fissi in Excel.

Uso di INDIRECT() per riferimenti fissi in Excel. Immagine dell’autore.

Esempi avanzati e casi d’uso

Una volta acquisite le basi, la funzione INDIRECT() dà il meglio di sé in scenari Excel più avanzati, soprattutto se abbinata a funzioni come VLOOKUP(), ROW() e agli array dinamici. Queste combinazioni sbloccano modelli ancora più dinamici e flessibili.

Usare INDIRECT() con VLOOKUP()

Puoi combinare INDIRECT() con VLOOKUP() per cambiare dinamicamente la tabella di ricerca in base all’input dell’utente.

Supponi di avere due tabelle, Prices_2022 e Prices_2023. In celle separate, G1: Prices_2022 e G2: Apple`. La formula sotto cerca dinamicamente "Apple" nella tabella dell’anno selezionato in base al valore in A1 e ne restituisce il prezzo.

=VLOOKUP(G2, INDIRECT(G1), 2, FALSE)

Uso di INDIRECT() con VLOOKUP() in Excel.

Uso di INDIRECT() con VLOOKUP() in Excel. Immagine dell’autore.

Dai un’occhiata al nostro tutorial VLOOKUP() from Another Sheet: A How-to in Excel per saperne di più su come cercare e recuperare dati da fogli Excel diversi.

INDIRECT() con riferimenti R1C1

INDIRECT() può usare anche la notazione R1C1, particolarmente utile quando si costruiscono formule in modo dinamico nelle macro o si referenziano posizioni in modo programmatico.

Ad esempio, la formula seguente restituisce il valore alla riga 2, colonna 3 (cella C2). Il secondo argomento (FALSE) indica a Excel che usi lo stile R1C1, non A1.

=INDIRECT("R2C3", FALSE)

Uso di INDIRECT() con R1C1 in Excel.

Uso di INDIRECT() con R1C1 in Excel. Immagine dell’autore.

La formula seguente include l’uso dinamico di ROW() e COLUMN(). La formula restituirà sempre il valore della colonna 3 sulla stessa riga in cui è scritta.

=INDIRECT("R" & ROW() & "C3", FALSE)

Uso di INDIRECT() con ROW() e COLUMN() in Excel.

Uso di INDIRECT() con ROW() e COLUMN() in Excel. Immagine dell’autore.

INDIRECT() e array dinamici

Prima che Excel introducesse gli array dinamici, INDIRECT() era un metodo comune per generare un comportamento simile agli array.

Per esempio, la formula seguente restituisce un array: {1; 2; 3; 4; 5}. Questo simula un array da 1 a 5 facendo riferimento indirettamente alle righe.

=ROW(INDIRECT("1:5"))

Uso di INDIRECT() con ROW() per array dinamici in Excel.

Uso di INDIRECT() con ROW() per array dinamici in Excel. Immagine dell’autore.

Il metodo alternativo moderno è usare la funzione SEQUENCE().

=SEQUENCE(5)

Uso di SEQUENCE() per array dinamici in Excel.

Uso di SEQUENCE() per array dinamici in Excel. Immagine dell’autore.

Usare INDIRECT() per gli array dinamici funziona ancora, ma è considerato meno efficiente e meno leggibile rispetto a SEQUENCE(), FILTER() e ad altre funzioni di array dinamici disponibili nelle versioni moderne di Excel (Office 365 ed Excel 2021+).

Avvertenze e problemi di prestazioni

La funzione INDIRECT() presenta alcune limitazioni importanti, soprattutto quando usata in cartelle di lavoro Excel grandi o complesse. Questi problemi includono quanto segue:

  • Funzione volatile (sovraccarico di ricalcolo): INDIRECT() è una funzione volatile, cioè si ricalcola ogni volta che viene apportata qualsiasi modifica in qualunque punto della cartella di lavoro, anche se il cambiamento non ha nulla a che fare con la formula. Questo può rallentare le prestazioni.

  • Il debug può essere impegnativo: Poiché INDIRECT() costruisce riferimenti a partire da testo, Excel non può tracciarli facilmente come fa con i riferimenti di cella standard. Questo rende difficile controllare le formule con “Precedenti/Dependenti”, o individuare riferimenti interrotti quando qualcosa cambia.

  • Considera alternative moderne: Quando possibile, è spesso meglio usare funzioni non volatili che offrono prestazioni e chiarezza superiori. Tra questi metodi: INDEX() per ricerche dinamiche di celle, CHOOSE() per selezionare dinamicamente da intervalli o opzioni predefinite e SEQUENCE() per generare array numerici dinamici.

Quando evitare di usare INDIRECT()

Sebbene INDIRECT() offra una grande flessibilità, non è sempre la scelta migliore. Spesso introduce complessità non necessaria, problemi di prestazioni o di manutenibilità. Di seguito alcune situazioni da evitare e i metodi alternativi consigliati.

  • Riferimenti di cella dinamici all’interno dello stesso foglio: Usa INDEX() invece di INDIRECT() per migliori prestazioni e tracciabilità.

  • Array dinamici o sequenze di numeri: Evita =ROW(INDIRECT("1:10")). Usa invece =SEQUENCE(10), che è più veloce, pulita e non volatile.

  • Quando la tracciabilità è importante: Le formule con INDIRECT() non possono essere tracciate in modo efficace con “Trace Precedents” o “Evaluate Formula”.

  • Riferimento a una cella o intervallo statico: Non usare INDIRECT("A1") se puoi semplicemente scrivere =A1.

  • Uso intensivo in fogli di grandi dimensioni: Poiché INDIRECT() è volatile, si ricalcola continuamente e può rallentare sensibilmente le prestazioni.

Alternative a INDIRECT()

La seguente tabella riassume le migliori alternative a INDIRECT().

Obiettivo

Preferisci questo invece di INDIRECT()

Riferimento dinamico a celle

INDEX()

Generare sequenze

SEQUENCE()

Logica condizionale o formule più pulite

LET()

Lookup multi-scenario

CHOOSE() o XLOOKUP()

Formule flessibili sul foglio

XLOOKUP() con dati strutturati o Power Query

Punti chiave

INDIRECT() trasforma stringhe di testo in riferimenti attivi, rendendola uno strumento potente per creare fogli di calcolo dinamici e flessibili. È utile per fare riferimento a fogli diversi, intervalli con nome o celle fisse che non dovrebbero spostarsi con le modifiche. Tuttavia, è una funzione volatile che si ricalcola spesso e può rallentare cartelle di lavoro grandi. È anche più difficile da tracciare e fare debug rispetto alle funzioni tradizionali. Usa INDIRECT() con criterio e valuta alternative più sicure ed efficienti.

Ti consiglio il nostro corso Data Analysis in Excel per scoprire insight nei dati B2B e il percorso di competenze Excel Fundamentals per approfondire le funzioni disponibili nelle versioni più recenti di Excel. Il nostro Advanced Excel Functions è perfetto se stai esplorando riferimenti e ricerche avanzate.

Allan Ouko

Autore

Allan Ouko

Technical writer di Data Science con esperienza pratica in data analytics, business intelligence e data science. Scrivo contenuti pratici e orientati al settore su SQL, Python, Power BI, Databricks e data engineering, basati su lavoro di analytics reale. La mia scrittura unisce profondità tecnica e impatto sul business, aiutando i professionisti a trasformare i dati in decisioni sicure.

FAQ su Excel

Cosa fa INDIRECT()?

INDIRECT() converte una stringa di testo in un riferimento a cella o intervallo.

INDIRECT() si aggiorna automaticamente?

Sì, INDIRECT() si ricalcola quando cambiano le celle referenziate, a meno che il riferimento non sia invalido.

Come incide INDIRECT() sulle prestazioni?

INDIRECT() si ricalcola ogni volta che una qualsiasi cella della cartella di lavoro cambia, il che può rallentare cartelle di lavoro grandi o complesse a causa dei ricalcoli frequenti.

Quali sono le alternative a INDIRECT()?

Usa INDEX(), CHOOSE(), SEQUENCE() o LET() per prestazioni più sicure e rapide.

Perché INDIRECT() restituisce #REF!?

Il riferimento a cui prova ad accedere non esiste o è scritto in modo errato.

Argomenti

Correlato