Wie kann man den vorherigen Wert einer geänderten Zelle in Excel speichern oder sich merken?
Normalerweise wird der vorherige Wert beim Aktualisieren einer Zelle mit neuem Inhalt überschrieben, es sei denn, Sie machen die Operation in Excel rückgängig. Wenn Sie jedoch den vorherigen Wert zum Vergleich mit dem aktualisierten Wert behalten möchten, ist es eine gute Wahl, den vorherigen Zellenwert in eine andere Zelle oder in einen Zellenkommentar zu speichern. Die Methode in diesem Artikel wird Ihnen helfen, dies zu erreichen.
Vorherigen Zellenwert mit VBA-Code in Excel speichern
Vorherigen Zellenwert mit VBA-Code in Excel speichern
Angenommen, Sie haben eine Tabelle wie im folgenden Screenshot gezeigt. Wenn sich eine Zelle in Spalte C ändert, möchten Sie möglicherweise ihren vorherigen Wert automatisch in die entsprechende Zelle der Spalte G oder als Kommentar speichern. Bitte gehen Sie wie folgt vor, um dies zu erreichen.
1. Klicken Sie in dem Arbeitsblatt, das die Werte enthält, die Sie beim Aktualisieren speichern möchten, mit der rechten Maustaste auf die Registerkarte des Blatts und wählen Sie "Ansicht Code" aus dem Kontextmenü. Siehe Screenshot:
2. Kopieren Sie den folgenden VBA-Code im sich öffnenden Fenster „Microsoft Visual Basic for Applications“ in das Codefenster.
Der folgende VBA-Code hilft Ihnen, den vorherigen Zellenwert einer bestimmten Spalte in eine andere Spalte zu speichern.
VBA-Code: Vorherigen Zellenwert in eine andere Spalte speichern
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: Vorherigen Zellenwert im Kommentar speichern
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
Hinweis: In dem Code gibt die Zahl 7 die Spalte G an, in der Sie den vorherigen Zellenwert speichern werden, und C:C ist die Spalte, in der Sie die Änderung vornehmen werden. Bitte passen Sie diese Angaben nach Bedarf an.
3. Klicken Sie auf "Extras" > "Verweise", um das Dialogfeld "Referenzen – VBAProject" zu öffnen, aktivieren Sie das Kontrollkästchen "Microsoft Scripting Runtime" und klicken Sie abschließend auf die Schaltfläche "OK". Siehe Screenshot:
4. Drücken Sie die Tasten "Alt" + "Q", um das Fenster "Microsoft Visual Basic for Applications" zu schließen.
Ab jetzt wird, wenn ein Zellenwert in Spalte C aktualisiert wird, der vorherige Wert in der entsprechenden Zelle in Spalte G oder als Kommentar gespeichert, wie in den folgenden Screenshots dargestellt.
Vorherige Zellenwerte in anderen Zellen speichern:
Vorherige Zellenwerte in Kommentaren speichern:
Die besten Office-Produktivitätstools
Steigern Sie Ihre Excel-Kompetenz mit Kutools für Excel und erleben Sie Effizienz wie nie zuvor. Kutools für Excel bietet über300 erweiterte Funktionen, um Ihre 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 Reiter-Oberfläche in Office und macht Ihre Arbeit so viel einfacher
- Aktivieren Sie die Bearbeitung und das Lesen in Reitern in Word, Excel, PowerPoint, Publisher, Access, Visio und Project.
- Öffnen und erstellen Sie mehrere Dokumente in neuen Reitern desselben Fensters, anstatt in neuen Fenstern.
- Steigert Ihre Produktivität um50 % und reduziert täglich Hunderte von Mausklicks!