Wie kann ich den vorherigen Zellenwert einer geänderten Zelle in Excel speichern oder speichern?
Normalerweise wird beim Aktualisieren einer Zelle mit neuem Inhalt der vorherige Wert überdeckt, es sei denn, Sie machen den Vorgang in Excel rückgängig. Wenn Sie jedoch den vorherigen Wert für den Vergleich mit dem aktualisierten beibehalten möchten, ist es eine gute Wahl, den vorherigen Zellenwert in einer anderen Zelle oder im Zellenkommentar zu speichern. Die Methode in diesem Artikel wird Ihnen dabei helfen.
Speichern Sie den vorherigen Zellenwert mit VBA-Code in Excel
Speichern Sie den vorherigen Zellenwert mit VBA-Code in Excel
Angenommen, Sie haben eine Tabelle wie im folgenden Screenshot gezeigt. Wenn sich eine Zelle in Spalte C geändert hat, möchten Sie den vorherigen Wert in der entsprechenden Zelle in Spalte G speichern oder automatisch im Kommentar speichern. Bitte gehen Sie wie folgt vor, um dies zu erreichen.
1. Wenn das Arbeitsblatt den Wert enthält, den Sie beim Aktualisieren speichern, klicken Sie mit der rechten Maustaste auf die Registerkarte Blatt und wählen Sie Code anzeigen aus dem Kontextmenü. Siehe Screenshot:
2. In der Öffnung Microsoft Visual Basic für Applikationen Kopieren Sie im folgenden Fenster den folgenden VBA-Code in das Code-Fenster.
Mit dem folgenden VBA-Code können Sie den vorherigen Zellenwert der angegebenen Spalte in einer anderen Spalte speichern.
VBA-Code: Speichern Sie den vorherigen Zellenwert in einer anderen Spaltenzelle
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
Um den vorherigen Zellenwert in einem Kommentar zu speichern, wenden Sie bitte den folgenden VBA-Code an
VBA-Code: Speichern Sie den vorherigen Zellenwert im Kommentar
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: Im Code gibt Nummer 7 die Spalte G an, in der Sie die vorherige Zelle speichern, und C: C ist die Spalte, in der Sie den vorherigen Zellenwert speichern. Bitte ändern Sie sie entsprechend Ihren Anforderungen.
3 Klicken Tools > Bibliographie öffnen Referenzen - VBAProject Wählen Sie im Dialogfeld Microsoft Scripting-Laufzeit Kästchen und klicken Sie schließlich auf OK Taste. Siehe Screenshot:
4. Drücken Sie die Taste Andere + Q Tasten zum Schließen der Microsoft Visual Basic für Applikationen Fenster.
Von nun an wird bei der Aktualisierung des Zellenwerts in Spalte C der vorherige Wert der Zelle in den entsprechenden Zellen in Spalte G gespeichert oder im Kommentar gespeichert, wie in den folgenden Screenshots gezeigt.
Vorherige Zellenwerte in anderen Zellen speichern:
Vorherige Zellenwerte in Kommentaren speichern:
Beste Office-Produktivitätstools
Verbessern Sie Ihre Excel-Kenntnisse mit Kutools für Excel und erleben Sie Effizienz wie nie zuvor. Kutools für Excel bietet über 300 erweiterte Funktionen, um die Produktivität zu steigern und Zeit zu sparen. Klicken Sie hier, um die Funktion zu erhalten, die Sie am meisten benötigen ...
Office Tab Bringt die Oberfläche mit Registerkarten in Office und erleichtert Ihnen die Arbeit erheblich
- Aktivieren Sie das Bearbeiten und Lesen von Registerkarten in Word, Excel und PowerPoint, Publisher, Access, Visio und Project.
- Öffnen und erstellen Sie mehrere Dokumente in neuen Registerkarten desselben Fensters und nicht in neuen Fenstern.
- Steigert Ihre Produktivität um 50 % und reduziert jeden Tag Hunderte von Mausklicks für Sie!