如何在Excel中記住或保存已更改單元格的先前單元格值?
通常,當用新內容更新單元格時,會覆蓋以前的值,除非在 Excel 中撤消操作。 但是,如果您想保留先前的值以與更新的值進行比較,將先前的單元格值保存到另一個單元格或單元格註釋中將是一個不錯的選擇。 本文中的方法將幫助您實現它。
在Excel中使用VBA代碼保存以前的單元格值
假設您有一個表格,如下所示。 如果C列中的任何單元格發生更改,則要將其先前的值保存到G列的相應單元格中,或自動保存在註釋中。 請按照以下步驟進行操作。
1.在工作表中包含更新時將保存的值,右鍵單擊工作表選項卡,然後選擇 查看代碼 從右鍵單擊菜單中。 看截圖:
2.在開幕 Microsoft Visual Basic for Applications 窗口,將下面的VBA代碼複製到“代碼”窗口中。
以下VBA代碼可幫助您將指定列的先前單元格值保存到另一列中。
VBA代碼:將先前的單元格值保存到另一個列單元格中
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
要在註釋中保存以前的單元格值,請應用以下VBA代碼
VBA代碼:在註釋中保存以前的單元格值
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
備註:在代碼中,數字7表示將先前的單元格保存到的G列,而C:C是將先前的單元格值保存的列。 請根據您的需要進行更改。
3。 點擊 工具 > 參考 打開 裁判– VBAProject 對話框,檢查 Microsoft腳本運行時 框,最後單擊 OK 按鈕。 看截圖:
4。 按 其他 + Q 關閉鍵 Microsoft Visual Basic for Applications 窗口。
從現在開始,當C列中的單元格值更新時,該單元格的先前值將保存到G列中的相應單元格中,或保存在註釋中,如下面的屏幕快照所示。
將以前的單元格值保存在其他單元格中:
在註釋中保存以前的單元格值:
最佳辦公效率工具
Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%
- 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
- 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
- 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
- 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
- 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
- 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
- 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
- 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
- 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆
- 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
- 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
- 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!


#25799
網站主持人對此評論進行了最小化
即時報告
0
0

#25800
網站主持人對此評論進行了最小化
即時報告
0
0

#29139
網站主持人對此評論進行了最小化
0
0

#38000
網站主持人對此評論進行了最小化
0
0

#29140
網站主持人對此評論進行了最小化
0
0

#31304
網站主持人對此評論進行了最小化
即時報告
0
0

#32224
網站主持人對此評論進行了最小化
即時報告
0
0

#32893
網站主持人對此評論進行了最小化
0
0

#33365
網站主持人對此評論進行了最小化
即時報告
0
0

#34148
網站主持人對此評論進行了最小化
即時報告
1
0

#35584
網站主持人對此評論進行了最小化
0
0

#35585
網站主持人對此評論進行了最小化
0
0

#35919
網站主持人對此評論進行了最小化
0
0

#38025
網站主持人對此評論進行了最小化
即時報告
0
0

#39145
網站主持人對此評論進行了最小化
0
0

#39260
網站主持人對此評論進行了最小化
即時報告
0
0

#40437
網站主持人對此評論進行了最小化
0
0

#40440
網站主持人對此評論進行了最小化
即時報告
0
0

#40675
網站主持人對此評論進行了最小化
即時報告
0
0

#40676
網站主持人對此評論進行了最小化
0
0
這裡還沒有評論