Come ottenere sempre il valore dalla cella sopra quando si inserisce o elimina una riga in Excel?
In Excel, fare riferimento al valore della cella direttamente sopra è un requisito comune per creare totali progressivi, confronti mese su mese o semplicemente mantenere la coerenza dei dati man mano che il foglio di lavoro si evolve. Normalmente, puoi fare riferimento alla cella sopra utilizzando una formula semplice come =D5
, ma questa soluzione ha i suoi limiti: se inserisci o elimini righe, la tua formula potrebbe non continuare a fare riferimento alla nuova cella "sopra" come ti aspetteresti. Come illustrato di seguito, inserire una nuova riga sopra può interrompere la continuità o mantenere il riferimento collegato alla cella originale invece di adattarsi alla nuova posizione.
Per risolvere questo problema e assicurarti che la tua formula recuperi sempre il valore dalla cella immediatamente sopra, anche dopo aver inserito o eliminato righe, ci sono diversi approcci che puoi seguire. Ogni metodo presenta compromessi diversi in base alla complessità del tuo foglio di lavoro, a se desideri un aggiornamento automatico o una formula manuale e a se sei a tuo agio con l'uso di VBA/macros.
Indice dei contenuti:
- Ottieni sempre il valore dalla cella sopra quando inserisci o elimini righe con una formula
- Aggiorna automaticamente il valore della cella dalla cella sopra utilizzando una macro VBA basata sugli eventi (sempre dinamica)
Ottieni sempre il valore dalla cella sopra quando inserisci o elimini righe con una formula
Per affrontare questo problema in modo semplice senza richiedere macro o configurazioni complesse, puoi utilizzare una formula che fa riferimento dinamicamente alla cella sopra, indipendentemente da come cambiano le tue righe. La formula utilizza le funzioni INDIRETTO e INDIRIZZO di Excel in modo che il riferimento "segua" sempre la cella sopra, anche se le righe vengono spostate a causa di inserimenti o eliminazioni. Questo la rende particolarmente adatta per fogli di lavoro in cui modifichi frequentemente la struttura delle righe, come l'aggiunta di nuovi dati all'inizio o al centro di un elenco.
Inserisci la seguente formula direttamente nella cella in cui vuoi ottenere sempre il valore dalla cella sopra (ad esempio, nella cella B6 se vuoi fare riferimento a B5):
=INDIRECT(ADDRESS(ROW()-1,COLUMN()))
Premi Invio dopo aver digitato la formula. La cella corrente visualizzerà istantaneamente il valore della cella immediatamente sopra, come mostrato di seguito:
Ora, se inserisci una nuova riga sopra la cella della formula di riferimento, la formula verrà ricalcolata e visualizzerà sempre il valore della nuova cella sopra. In questo modo le tue formule saranno sempre aggiornate, indipendentemente dagli inserimenti o dalle eliminazioni di righe. Dai un'occhiata allo screenshot seguente per riferimento:
Spiegazione dei parametri e suggerimenti:
- Questa formula recupererà il valore della cella direttamente sopra la cella della formula corrente - quindi usarla in B6 rifletterà sempre B5, anche se vengono inserite o eliminate righe sopra.
- Se utilizzi questa formula nella prima riga dei tuoi dati (come A1), potrebbe provare a recuperare dati da una riga inesistente e restituire un errore
#RIF!
. Puoi evitarlo aggiungendo la gestione degli errori, ad esempio con=SE(RIGA()=1;"";INDIRETTO(INDIRIZZO(RIGA()-1;COLONNA())))
per mostrare vuoto nella prima riga. - Tieni presente che INDIRETTO è una funzione volatile, quindi in fogli di lavoro estremamente grandi, un uso eccessivo può rallentare i calcoli.
- L'uso di questa formula funziona bene quando vuoi preservare una relazione rigorosa con la posizione della riga, indipendentemente da come cambia la struttura del tuo foglio.
Suggerimenti per la risoluzione dei problemi e riassunto:
Se la tua formula non si aggiorna come previsto dopo aver inserito o eliminato righe, verifica di averla inserita nella cella corretta. Assicurati inoltre di non utilizzare riferimenti di cella assoluti (come $A$1), che sono statici. Se riscontri #REF!
errori nella prima riga, considera l'utilizzo di una formula condizionale come menzionato in precedenza. Per un'automazione avanzata, o se hai bisogno che il valore venga copiato e non solo referenziato, consulta la soluzione basata su macro VBA guidata dagli eventi qui sotto per un approccio dinamico basato sul codice.
Aggiorna automaticamente il valore della cella dalla cella sopra utilizzando una macro VBA guidata dagli eventi (sempre dinamica)
Se hai bisogno di una soluzione in cui il valore della cella si aggiorna sempre automaticamente in base alla cella sopra, indipendentemente dall'inserimento o dall'eliminazione di righe - e vuoi che questo comportamento sia gestito senza copiare formule - l'uso di una macro VBA guidata dagli eventi è efficace. Questo metodo è ideale per gli utenti a proprio agio con l'abilitazione delle macro e consente un aggiornamento dinamico: ogni volta che selezioni una cella o un intervallo specifico, o quando modifichi un valore, la macro può impostare istantaneamente la cella target in modo che sia sempre uguale al valore sopra, rendendo l'inserimento dei dati coerente indipendentemente da come cambia il tuo foglio di lavoro. Questo è particolarmente utile nei modelli in cui vuoi un pattern fisso o una configurazione di valori predefiniti in ogni nuova riga.
Ecco come configurarlo utilizzando l'evento Worksheet_Change:
1. Fai clic con il pulsante destro del mouse sulla scheda del foglio di lavoro in cui desideri questa funzionalità, e seleziona Visualizza codice. L'editor Microsoft Visual Basic for Applications si aprirà nel modulo del foglio di lavoro corretto.
2. Copia e incolla il seguente codice VBA nella finestra del modulo del foglio di lavoro:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim WatchRange As Range
On Error Resume Next
' Set the range you want to monitor (for example, B2:B100)
Set WatchRange = Intersect(Target, Me.Range("B2:B100"))
If Not WatchRange Is Nothing Then
Application.EnableEvents = False
Dim cell As Range
For Each cell In WatchRange
' Avoid the first row, or adjust as needed
If cell.Row > 1 Then
cell.Value = Me.Cells(cell.Row - 1, cell.Column).Value
End If
Next cell
Application.EnableEvents = True
End If
End Sub
Note sui parametri: Sostituisci "B2:B100"
in Me.Range("B2:B100")
con l'intervallo effettivo in cui desideri questo comportamento (puoi impostarlo su un'intera colonna, ad es. "B:B"
, ma restringere l'intervallo migliora le prestazioni ed evita sovrascritture involontarie).
3. Chiudi l'editor VBA. Ora, ogni volta che una cella viene modificata, inserita o il foglio di lavoro viene aggiornato all'interno dell'intervallo specificato, Excel aggiornerà automaticamente quelle celle per riflettere il valore sopra. Ad esempio, se inserisci una riga alla riga 5, tutte le celle monitorate nella colonna B da quel punto in poi prenderanno il valore dalla cella direttamente sopra la loro nuova posizione.
- Fai attenzione: questo codice sovrascriverà i valori inseriti manualmente all'interno dell'intervallo monitorato. Usa con cautela se hai celle con formule o vuoi preservare le voci originali.
- Se vuoi continuare a utilizzare questa macro VBA nel file in futuro, devi salvare il file come cartella di lavoro abilitata per le macro (.xlsm).
- Il codice dell'evento funzionerà solo sul modulo del foglio di lavoro in cui è incollata la macro (non su tutti i fogli a meno che il codice non venga aggiunto a ciascun modulo del foglio).
- Se vuoi che l'aggiornamento avvenga selezionando una cella invece che cambiando un valore, puoi utilizzare Worksheet_SelectionChange e una logica simile.
Suggerimenti per la risoluzione dei problemi e riassunto:
Se lo script VBA sembra non funzionare dopo averlo copiato, assicurati che le macro siano abilitate nel tuo file e che tu abbia incollato il codice nel modulo del foglio corretto (non in un modulo standard). Se ricevi errori o Excel si blocca, verifica che Application.EnableEvents sia impostato su False prima delle modifiche automatiche delle celle e reimpostalo su True dopo per evitare loop ricorsivi. Per altri comportamenti avanzati o un controllo più fine, considera uno scripting personalizzato basato sulla tua struttura dati.
I migliori strumenti per la produttività in Office
Potenzia le tue competenze in Excel con Kutools per Excel e sperimenta un'efficienza mai vista prima. Kutools per Excel offre oltre300 funzionalità avanzate per aumentare la produttività e farti risparmiare tempo. Clicca qui per ottenere la funzione di cui hai più bisogno...
Office Tab porta le schede su Office e rende il tuo lavoro molto più semplice
- Abilita la modifica e lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Apri e crea più documenti in nuove schede della stessa finestra invece che in nuove finestre.
- Aumenta la produttività del50% e riduce centinaia di clic del mouse ogni giorno!
Tutti gli add-in Kutools. Un solo programma di installazione
La suite Kutools for Office include add-in per Excel, Word, Outlook & PowerPoint più Office Tab Pro, ideale per i team che lavorano su più app di Office.





- Suite tutto-in-uno — Add-in per Excel, Word, Outlook & PowerPoint + Office Tab Pro
- Un solo programma di installazione, una sola licenza — configurazione in pochi minuti (pronto per MSI)
- Funzionano meglio insieme — produttività ottimizzata su tutte le app Office
- Prova completa30 giorni — nessuna registrazione, nessuna carta di credito
- Massimo risparmio — costa meno rispetto all’acquisto singolo degli add-in