Come ricordare o salvare il valore della cella precedente di una cella modificata in Excel?
Normalmente, quando si aggiorna una cella con un nuovo contenuto, il valore precedente verrà coperto a meno che non si annulli l'operazione in Excel. Tuttavia, se desideri mantenere il valore precedente per il confronto con quello aggiornato, salvare il valore della cella precedente in un'altra cella o nel commento della cella sarà una buona scelta. Il metodo in questo articolo ti aiuterà a raggiungerlo.
Salva il valore della cella precedente con il codice VBA in Excel
Salva il valore della cella precedente con il codice VBA in Excel
Supponendo che tu abbia una tabella come mostrato nell'immagine sottostante. Se una cella nella colonna C è cambiata, si desidera salvare il suo valore precedente nella cella corrispondente della colonna G o salvare automaticamente nel commento. Si prega di fare quanto segue per ottenerlo.
1. Nel foglio di lavoro contiene il valore che verrà salvato durante l'aggiornamento, fare clic con il pulsante destro del mouse sulla scheda del foglio e selezionare Visualizza codice dal menu di scelta rapida. Vedi screenshot:
2. In apertura Microsoft Visual Basic, Applications Edition finestra, copia il codice VBA sottostante nella finestra del codice.
Il seguente codice VBA ti aiuta a salvare il valore della cella precedente della colonna specificata in un'altra colonna.
Codice VBA: salva il valore della cella precedente 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 salvare il valore della cella precedente in un commento, applica il codice VBA sottostante
Codice VBA: salva il valore della cella precedente 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:: Nel codice, il numero 7 indica la colonna G in cui salverai la cella precedente e C: C è la colonna in cui salverai il valore della cella precedente. Si prega di modificarli in base alle proprie esigenze.
3. Clic Strumenti > Testimonianze per aprire il Riferimenti - VBAProject finestra di dialogo, selezionare Runtime di script Microsoft casella e infine fare clic su OK pulsante. Vedi screenshot:
4. premi il altro + Q i tasti per chiudere il file Microsoft Visual Basic, Applications Edition finestra.
D'ora in poi, quando il valore della cella nella colonna C viene aggiornato, il valore precedente della cella verrà salvato nelle celle corrispondenti nella colonna G o salvato nel commento come mostrato nelle schermate di seguito.
Salva i valori delle celle precedenti in altre celle:
Salva i valori delle celle precedenti nei commenti:
I migliori strumenti per la produttività in ufficio
Potenzia le tue competenze di Excel con Kutools per Excel e sperimenta l'efficienza come mai prima d'ora. Kutools per Excel offre oltre 300 funzionalità avanzate per aumentare la produttività e risparmiare tempo. Fai clic qui per ottenere la funzionalità di cui hai più bisogno...
Office Tab porta l'interfaccia a schede in Office e semplifica notevolmente il tuo lavoro
- 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, piuttosto che in nuove finestre.
- Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!