Bagaimana cara mengingat atau menyimpan nilai sel sebelumnya dari sel yang diubah di Excel?
Biasanya, saat memperbarui sel dengan konten baru, nilai sebelumnya akan tercakup kecuali membatalkan operasi di Excel. Namun, jika Anda ingin menyimpan nilai sebelumnya untuk membandingkan dengan yang diperbarui, menyimpan nilai sel sebelumnya ke sel lain atau ke dalam komentar sel akan menjadi pilihan yang baik. Metode dalam artikel ini akan membantu Anda mencapainya.
Simpan nilai sel sebelumnya dengan kode VBA di Excel
Simpan nilai sel sebelumnya dengan kode VBA di Excel
Misalkan Anda memiliki tabel seperti gambar di bawah ini. Jika ada sel di kolom C yang berubah, Anda ingin menyimpan nilai sebelumnya ke dalam sel kolom G yang sesuai atau menyimpan dalam komentar secara otomatis. Mohon lakukan hal berikut untuk mencapainya.
1. Pada lembar kerja berisi nilai yang akan Anda simpan saat memperbarui, klik kanan tab lembar dan pilih Lihat kode dari menu klik kanan. Lihat tangkapan layar:
2. Dalam pembukaan Microsoft Visual Basic untuk Aplikasi jendela, salin kode VBA di bawah ini ke jendela Kode.
Kode VBA berikut membantu Anda menyimpan nilai sel sebelumnya dari kolom tertentu ke kolom lain.
Kode VBA: Simpan nilai sel sebelumnya ke sel kolom lain
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
Untuk menyimpan nilai sel sebelumnya dalam komentar, harap terapkan kode VBA di bawah ini
Kode VBA: Simpan nilai sel sebelumnya di komentar
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: Dalam kode, angka 7 menunjukkan kolom G tempat Anda akan menyimpan sel sebelumnya, dan C: C adalah kolom tempat Anda menyimpan nilai sel sebelumnya. Silakan ubah sesuai kebutuhan Anda.
3. klik Tools > Referensi untuk membuka Referensi - VBAProject kotak dialog, periksa Runtime Microsoft Scripting kotak, dan terakhir klik OK tombol. Lihat tangkapan layar:
4. tekan lain + Q kunci untuk menutup Microsoft Visual Basic untuk Aplikasi jendela.
Mulai sekarang, ketika nilai sel di kolom C diperbarui, nilai sel sebelumnya akan disimpan ke dalam sel yang sesuai di kolom G, atau simpan dalam komentar seperti yang ditunjukkan tangkapan layar di bawah ini.
Simpan nilai sel sebelumnya di sel lain:
Simpan nilai sel sebelumnya di komentar:
Alat Produktivitas Kantor Terbaik
Tingkatkan Keterampilan Excel Anda dengan Kutools for Excel, dan Rasakan Efisiensi yang Belum Pernah Ada Sebelumnya. Kutools for Excel Menawarkan Lebih dari 300 Fitur Lanjutan untuk Meningkatkan Produktivitas dan Menghemat Waktu. Klik Di Sini untuk Mendapatkan Fitur yang Paling Anda Butuhkan...
Tab Office Membawa antarmuka Tab ke Office, dan Membuat Pekerjaan Anda Jauh Lebih Mudah
- Aktifkan pengeditan dan pembacaan tab di Word, Excel, PowerPoint, Publisher, Access, Visio, dan Project.
- Buka dan buat banyak dokumen di tab baru di jendela yang sama, bukan di jendela baru.
- Meningkatkan produktivitas Anda sebesar 50%, dan mengurangi ratusan klik mouse untuk Anda setiap hari!