Come si può ricordare o salvare il valore precedente di una cella modificata in Excel?
Quando modifichi una cella in Excel, il valore precedente viene sovrascritto all’istante e non è più visibile, a meno che tu non annulli l’operazione. Se devi conservare quel valore — per confrontarlo, verificarlo o ripristinarlo — puoi acquisirlo automaticamente con una breve routine VBA che lo registra in una colonna di appoggio prima di ogni modifica, oppure puoi tracciare le modifiche tramite gli strumenti di Microsoft 365 («Mostra modifiche» e «Cronologia versioni») quando il file è salvato su OneDrive o SharePoint. Questa guida ti illustra entrambi gli approcci, così da poter scegliere quello più adatto al tuo flusso di lavoro e alle tue esigenze di governance.
➤ Microsoft 365 — Esamina i valori precedenti e aggiornati delle celle con Mostra modifiche e Cronologia versioni
Salva il valore precedente della cella con codice VBA in Excel
Immagina di avere una tabella come quella mostrata nello screenshot seguente. Ogni volta che modifichi una cella nella colonna C, potresti voler salvare automaticamente il suo valore precedente nella cella corrispondente della colonna G oppure aggiungerlo come commento per future consultazioni e revisioni. Questo approccio è particolarmente utile quando desideri tenere traccia in modo continuativo dei cambiamenti o fare riferimento ai valori precedenti durante l’inserimento dati o i controlli di qualità.

Scenario tipico: Per fogli di lavoro in cui si esaminano o riconciliano frequentemente le modifiche, come inventari, registri o tracciamenti finanziari, mantenere visibili i valori precedenti può risparmiare tempo e ridurre al minimo la perdita accidentale di dati.
Per iniziare, apri il foglio di lavoro in cui vuoi registrare i valori precedenti. Poi, segui questi semplici passaggi:
1. Fai clic con il pulsante destro del mouse sulla scheda del foglio e seleziona «Visualizza codice» dal menu contestuale: si aprirà l'editor di Visual Basic for Applications (VBA). Vedi lo screenshot:

2. Nella finestra «Microsoft Visual Basic for Applications», incolla il seguente codice VBA nella finestra del codice: questa macro salverà automaticamente il valore precedente delle celle della colonna di destinazione in un’altra colonna.
Prima di eseguire questo script, assicurati di aggiornare i riferimenti alle colonne di destinazione nel codice. Negli esempi forniti, «C:C» indica la colonna monitorata per le modifiche, mentre il numero «7» corrisponde alla colonna G, dove vengono archiviati i valori precedenti. Personalizza questi riferimenti in base al tuo layout.
Codice VBA: Salva il valore precedente della cella in un'altra cella della colonna
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xDCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
x = xDic.Keys
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
Set xDCell = Cells(xCell.Row, 7)
xDCell.Value = ""
xDCell.Value = xDic.Items(I)
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Formula
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub Per situazioni in cui è preferibile archiviare il valore precedente come Commento — utile per una visualizzazione rapida e annotazioni — il seguente codice VBA lo fa automaticamente ogni volta che una cella della colonna di destinazione viene modificata:
Codice VBA: Salva il valore precedente della cella nel commento
Dim xRg As Range
Dim xChangeRg As Range
Dim xDependRg As Range
Dim xDic As New Dictionary
Private Sub Worksheet_Change(ByVal Target As Range)
Dim I As Long
Dim xCell As Range
Dim xHeader As String
Dim xCommText As String
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
xHeader = "Previous value :"
For I = 0 To UBound(xDic.Keys)
Set xCell = Range(xDic.Keys(I))
If Not xCell.Comment Is Nothing Then xCell.Comment.Delete
With xCell
.AddComment
.Comment.Visible = False
.Comment.Text xHeader & vbCrLf & xDic.Items(I)
End With
Next
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim I, J As Long
Dim xRgArea As Range
On Error GoTo Label1
If Target.Count > 1 Then Exit Sub
Application.EnableEvents = False
Set xDependRg = Target.Dependents
If xDependRg Is Nothing Then GoTo Label1
If Not xDependRg Is Nothing Then
Set xDependRg = Intersect(xDependRg, Range("C:C"))
End If
Label1:
Set xRg = Intersect(Target, Range("C:C"))
If (Not xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = Union(xRg, xDependRg)
ElseIf (xRg Is Nothing) And (Not xDependRg Is Nothing) Then
Set xChangeRg = xDependRg
ElseIf (Not xRg Is Nothing) And (xDependRg Is Nothing) Then
Set xChangeRg = xRg
Else
Application.EnableEvents = True
Exit Sub
End If
xDic.RemoveAll
For I = 1 To xChangeRg.Areas.Count
Set xRgArea = xChangeRg.Areas(I)
For J = 1 To xRgArea.Count
xDic.Add xRgArea(J).Address, xRgArea(J).Text
Next
Next
Set xChangeRg = Nothing
Set xRg = Nothing
Set xDependRg = Nothing
Application.EnableEvents = True
End Sub Note sui parametri:
- Il numero 7 in
Cells(xCell.Row,7)si riferisce alla colonna G. Modifica questo valore se vuoi salvare il valore precedente in un’altra colonna. Range("C:C")definisce la colonna da monitorare per le modifiche. Modificala in base alle tue esigenze, ad esempio in «D:D» per la colonna D.
3. Per abilitare il supporto per i dizionari nello script, vai su «Strumenti» > «Riferimenti...» nell’editor VBA. Nella finestra di dialogo «Riferimenti – VBAProject» che appare, seleziona «Microsoft Scripting Runtime» e fai clic su «OK», come mostrato:

4. Premi «Alt» + «Q» per uscire dall'editor VBA e tornare al foglio di lavoro.
Da questo momento in poi, ogni volta che un valore nella colonna C viene modificato, Excel copierà automaticamente il suo valore precedente nella colonna G o lo aggiungerà al commento della cella, consentendoti di tracciare e convalidare comodamente le modifiche e garantendo l’accessibilità dei dati storici per revisioni, controlli o correzioni di errori.
Esempio di output per il salvataggio dei valori precedenti delle celle in altre celle:

Esempio di output per il salvataggio dei valori precedenti delle celle nei commenti:

Suggerimenti e risoluzione problemi:
- Se le macro VBA non funzionano come previsto, verifica le impostazioni di sicurezza delle macro in «File» > «Opzioni» > «Centro protezione» > «Impostazioni macro» e seleziona l’opzione «Abilita tutte le macro».
- Verifica i riferimenti alle colonne se i valori non vengono registrati nella posizione prevista.
- Se gli errori persistono, assicurati che la libreria «Microsoft Scripting Runtime» sia abilitata correttamente, come indicato in precedenza.
Microsoft 365 — Esamina i valori precedenti e aggiornati delle celle con Mostra modifichee Cronologia versioni
In Microsoft 365, puoi tenere traccia di ogni modifica (chi ha modificato cosa e quando, inclusi i valori precedenti e successivi) senza dover ricorrere alla funzione legacy «Traccia modifiche». Usa Mostra modifiche per visualizzare i dettagli a livello di cella e Cronologia versioni per accedere a istantanee complete del file e ripristinarle all’occorrenza.
Requisiti
- Cartella di lavoro salvata su OneDrive o SharePoint.
- Accesso effettuato con un account Microsoft 365; salvataggio automatico impostato su Attivato.
- Formato moderno ().xlsx): non utilizza la funzione legacy Cartella di lavoro condivisa (legacy).
Mostra modifiche (controllo a livello di cella)
1. Apri la cartella di lavoro salvata nel cloud e vai su Revisione ▸ Mostra modifiche per aprire il riquadro.
2. (Opzionale) Seleziona prima un foglio o un intervallo per limitare i risultati.
3. Sfoglia le voci per visualizzare autore, data/ora e i valori precedente → nuovo; fai clic su una voce per passare direttamente alla cella.
Cronologia versioni (confronta e ripristina)
1. Vai su File ▸ Informazioni ▸ Cronologia versioni.
2. Apri una versione precedente per confrontarla; copia le celle desiderate o fai clic su Ripristina per ripristinare l'intero file.
- «Mostra modifiche» è disattivato?Salva su OneDrive/SharePoint, attiva il salvataggio automatico e converti dal formato Modalità compatibilità ()File ▸ Informazioni ▸ Converti). Inoltre, assicurati che la funzione Cartella di lavoro condivisa (legacy) sia disattivata. Prova Excel per il Web se l'applicazione desktop dovesse risultare ancora non disponibile.
- Sicurezza/blocchi: La protezione della cartella di lavoro o del foglio, la crittografia o l’IRM potrebbero disabilitare «Mostra modifiche».
- File locali: La cronologia completa non viene conservata per i file esclusivamente locali; per ottenere i risultati migliori, utilizza la Cronologia versioni tramite il cloud.
- Hai bisogno che i valori vengano scritti direttamente nelle celle? «Mostra modifiche» e «Cronologia versioni» sono strumenti di controllo; per registrare il «valore precedente» in una colonna di appoggio a ogni modifica, usa un piccolo logger VBA basato sull'evento
Worksheet_Change.
Vantaggi
- Controllo automatico di chi ha apportato modifiche e quando, con visualizzazione dei valori precedenti e successivi — nessuna macro richiesta.
- Disponibile su più piattaforme (Windows, Mac, Web) quando il file è salvato in OneDrive o SharePoint.
Svantaggi
- Richiede l’archiviazione cloud e il salvataggio automatico; fornisce dettagli limitati per alcune modifiche temporanee.
- Non inserisce direttamente i valori precedenti nelle celle; utilizza VBA se questa funzionalità è richiesta dalla logica aziendale.
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 oltre 300 funzionalità avanzate per aumentare la produttività e Risparmia tempo.Clicca qui per ottenere la funzionalità di cui hai più bisogno...
Office Tab Porta l'interfaccia a schede in Office e rende il tuo lavoro molto più semplice
- Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Apri e crea più documenti in nuove schede all’interno della stessa finestra, invece che in finestre separate.
- Aumenta la tua produttività del 50 % e risparmia centinaia di clic del mouse ogni giorno!
Tutti i componenti aggiuntivi di Kutools in un unico programma di installazione.
Kutools for Office è la suite che include componenti aggiuntivi per Excel, Word, Outlook e PowerPoint, oltre a Office Tab Pro: la soluzione ideale per i team che lavorano su diverse app di Office.
- Suite completa— componenti aggiuntivi per Excel, Word, Outlook e PowerPoint + Office Tab Pro
- Un unico programma di installazione, una sola licenza— configurazione in pochi minuti (pronto per MSI)
- Funziona meglio insieme— produttività ottimizzata tra le app di Office
- Prova gratuita di 30 giorni con tutte le funzionalità— nessuna registrazione, nessuna carta di credito
- Miglior rapporto qualità-prezzo— risparmia rispetto all’acquisto dei singoli componenti aggiuntivi