Come ricordare o salvare il valore precedente di una cella modificata in Excel?
Normalmente, quando si aggiorna una cella con un nuovo contenuto, il valore precedente viene sovrascritto a meno che non si annulli l'operazione in Excel. Tuttavia, se si desidera mantenere il valore precedente per confrontarlo con quello aggiornato, salvare il valore precedente della cella in un'altra cella o nel commento della cella sarà una buona scelta. Il metodo descritto in questo articolo ti aiuterà a raggiungere questo obiettivo.
Salva il valore precedente della cella con il codice VBA in Excel
Salva il valore precedente della cella con il codice VBA in Excel
Supponendo di avere una tabella come mostrato nello screenshot sottostante. Se una qualsiasi cella nella colonna C cambia, potresti voler salvare il suo valore precedente nella cella corrispondente della colonna G o automaticamente come commento. Si prega di seguire i passaggi successivi per realizzarlo.
1. Nel foglio di lavoro contenente i valori che desideri salvare durante l'aggiornamento, fai clic con il tasto destro sulla scheda del foglio e seleziona "Visualizza Codice" dal menu contestuale. Vedi screenshot:
2. Nella finestra "Microsoft Visual Basic for Applications" che si apre, copia il seguente codice VBA nella finestra del Codice.
Il seguente codice VBA ti aiuta a salvare il valore precedente della cella di una colonna specificata in un'altra colonna.
Codice VBA: Salva il valore precedente della cella in un'altra cella di 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 salvare il valore precedente della cella in un commento, applica il seguente codice VBA
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
Nota: Nel codice, il numero 7 indica la colonna G in cui salverai il valore precedente della cella, e C:C è la colonna in cui effettuerai la modifica. Modificali in base alle tue esigenze.
3. Fai clic su "Strumenti" > "Riferimenti" per aprire la finestra di dialogo "Riferimenti – VBAProject", seleziona la casella "Microsoft Scripting Runtime" e infine fai clic sul pulsante "OK". Vedi screenshot:
4. Premi i tasti "Alt" + "Q" per chiudere la finestra "Microsoft Visual Basic for Applications".
Da ora in poi, quando un valore della cella nella colonna C viene aggiornato, il valore precedente verrà salvato nella cella corrispondente nella colonna G o come commento, come mostrato negli screenshot sottostanti.
Salva i valori precedenti delle celle in altre celle:
Salva i valori precedenti delle celle nei commenti:
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 risparmiare tempo. Clicca qui per ottenere la funzione 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 della stessa finestra, invece che in nuove finestre.
- Aumenta la tua produttività del50% e riduce centinaia di clic del mouse ogni giorno!