Note: The other languages of the website are Google-translated. Back to English

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

Kutools for Excel Memecahkan Sebagian Besar Masalah Anda, dan Meningkatkan Produktivitas Anda hingga 80%

  • Reuse: Masukkan dengan cepat rumus, bagan yang kompleks dan apa pun yang pernah Anda gunakan sebelumnya; Enkripsi Sel dengan kata sandi; Buat Milis dan mengirim email ...
  • Bilah Formula Super (dengan mudah mengedit beberapa baris teks dan rumus); Membaca Tata Letak (membaca dan mengedit sel dalam jumlah besar dengan mudah); Tempel ke Rentang yang Difilter...
  • Gabungkan Sel / Baris / Kolom tanpa kehilangan Data; Pisahkan Konten Sel; Gabungkan Baris / Kolom Duplikat... Mencegah Sel Duplikat; Bandingkan Rentang...
  • Pilih Duplikat atau Unik Baris; Pilih Baris Kosong (semua sel kosong); Temukan Super dan Temukan Fuzzy di Banyak Buku Kerja; Pilih Acak ...
  • Salinan Tepat Beberapa Sel tanpa mengubah referensi rumus; Buat Referensi Otomatis ke Beberapa Lembar; Sisipkan Poin, Kotak Centang, dan lainnya ...
  • Ekstrak Teks, Tambahkan Teks, Hapus berdasarkan Posisi, Hapus Space; Membuat dan Mencetak Subtotal Paging; Konversi Konten Antar Sel dan Komentar...
  • Filter Super (simpan dan terapkan skema filter ke sheet lain); Penyortiran Lanjutan menurut bulan / minggu / hari, frekuensi dan lainnya; Filter Khusus dengan huruf tebal, miring ...
  • Gabungkan Workbooks dan WorkSheets; Gabungkan Tabel berdasarkan kolom kunci; Pisahkan Data menjadi Beberapa Lembar; Konversi Batch xls, xlsx dan PDF...
  • Lebih dari 300 fitur canggih. Mendukung Office / Excel 2007-2021 dan 365. Mendukung semua bahasa. Penerapan yang mudah di perusahaan atau organisasi Anda. Fitur lengkap Uji coba gratis 30 hari. Jaminan uang kembali 60 hari.
tab kte 201905

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!
officetab bawah
Urutkan komentar berdasarkan
komentar (20)
Belum ada peringkat. Jadilah yang pertama memberi peringkat!
Komentar ini diminimalkan oleh moderator di situs
saya memerlukan sesuatu seperti ini, tetapi hanya di sel tertentu (mis.: G12 untuk menunjukkan di H23 nilai lama)
Komentar ini diminimalkan oleh moderator di situs
Dan lainnya ... Saya perlu menjalankan ini ketika sel berubah dengan hasil (EX.: A1 + B1 = C1... jika saya mengubah nilai A atau B, skrip tidak berfungsi - tidak ada yang terjadi di sel G)
Komentar ini diminimalkan oleh moderator di situs
Hai ! Saya hanya ingin tahu apakah mungkin mendaftarkan perubahan kelipatan ke sel, maksud saya, jika saya memasukkan data ke dalam sel C2 dan kemudian saya mengubah data itu untuk informasi lain, data sebelumnya diteruskan ke sel G2 (seperti di posting ini ), tetapi jika saya mengubah nilainya sekali lagi di sel C2, perubahan kedua yang saya buat lolos ke sel H2 (misalnya) dan sekarang saya mendaftarkan informasi dari 3 gerakan yang saya sadari, dan melakukannya hampir 5 kali more (menyimpan nilai sel sebelumnya 5 kali). Jika Anda dapat membantu saya, saya akan sangat menghargai karena di sini, di pos Anda, ini adalah satu-satunya tempat yang saya temukan untuk menyelesaikan sebagian masalah saya. Terima kasih telah membagikan konten ini!!!!
Komentar ini diminimalkan oleh moderator di situs
apakah Anda menemukan cara melakukan ini?
Komentar ini diminimalkan oleh moderator di situs
Saya sedang memikirkan kalimat "Jika/lain" tetapi saya baru menggunakan VBA, jadi jika Anda memiliki posting lain yang dapat saya bantu, silakan bagikan dengan saya, dan sekali lagi terima kasih! terus berbagi ilmu
Komentar ini diminimalkan oleh moderator di situs
Mengapa kode di atas tidak berfungsi untuk data DDE, saya memiliki data di kolom yang berubah melalui dde , tetapi saat saya menerapkan kode ini untuk menyimpan nilai sebelumnya dari kolom itu ke kolom lain, itu tidak melakukan apa-apa;

Bantuan apa pun untuk mencapai ini sangat dihargai.
Komentar ini diminimalkan oleh moderator di situs
Hi!

Fungsi hebat tetapi bagaimana itu bisa dimodifikasi agar berfungsi juga dengan sel Saya ingin menghafal nilai yang mengandung VLOOKUP? Sayangnya saya tidak dapat menemukan apa yang harus dimodifikasi untuk menyimpan nilai dari VLOOKUP. Karena itu tidak berfungsi ketika VLOOKUP berada di tengah :(

Terima kasih sebelumnya atas bantuan Anda !
Komentar ini diminimalkan oleh moderator di situs
Halo, jadi modifikasi kode "kode VBA: Simpan nilai sel sebelumnya ke sel kolom lain" yang Anda buat, namun saya punya beberapa pertanyaan:

1. Bagaimana kode mengetahui kolom mana yang memiliki nilai baru? (yang setelah pembaruan lain akan memiliki nilainya di kolom lain)
2. Bagaimana Anda bisa membuat ini menjadi Makro? Atau membuatnya berjalan secara otomatis ketika program lain memanggil xlsm. mengajukan?

Terima kasih
Komentar ini diminimalkan oleh moderator di situs
Ini untuk satu nilai sel, tetapi bagaimana untuk beberapa nilai sel, saya ingin menyimpan data 4 sel dan memperbarui seperti ini misalnya data sel C, D, E, F menjadi sel G, H, I, J masing-masing, bagaimana bisa tolong bantu
Komentar ini diminimalkan oleh moderator di situs
Jika sel yang ingin saya simpan adalah rumus, sel G hanya akan menyimpan rumus, dan menghitung nilainya. Saya perlu menyimpan nilainya - bukan rumusnya. Bagaimana saya bisa memberi tahu kode VBA, bahwa nilainya berubah meskipun rumusnya tidak berubah. Salam Hormat Flemming
Komentar ini diminimalkan oleh moderator di situs
Apakah ada cara untuk mengulangi ini untuk semua perubahan? Saya ingin Kotak Komentar menampilkan semua entri sebelumnya jika memungkinkan.
Komentar ini diminimalkan oleh moderator di situs
Hai Jenni! Apakah Anda berhasil menyelesaikan masalah ini? Saya juga mencoba mengumpulkan di kotak komentar semua entri baru, tetapi saya mengalami kesulitan untuk menyesuaikan kode VBA dengan ini. Terima kasih!
Komentar ini diminimalkan oleh moderator di situs
Bagus jika Anda mengetik. Bisakah Anda membantu saya mengerjakannya saat data dimasukkan dengan menggunakan nilai fungsi dari DDE (Dynamic Data Exchange) juga?
Komentar ini diminimalkan oleh moderator di situs
Hai,
Maaf saya tidak bisa menyelesaikan masalah ini. Saya sarankan Anda memposting masalah ke forum di bawah ini untuk mendapatkan bantuan dari penggemar Excel lainnya.
https://www.extendoffice.com/forum/kutools-for-excel.html
Komentar ini diminimalkan oleh moderator di situs
cho e hỏi chút là có cách nào khi tính toán cộng trừ xong thì nó sẽ lưu lại giá trị khi tính toán xong không
vi dụ:
Giá trị cột A = cột B + cột C
tính toán xong cột A sẽ lưu giá trị sau khi tính toán xong, lần tiếp theo tính toán thì nó cột A sẽ lấy giá trị hiện tính toán thì nó cột
Komentar ini diminimalkan oleh moderator di situs
Hai trung,
Kode telah diperbarui. Ayo cobalah. Terima kasih atas tanggapan Anda.
Dalam kode berikut, nomor 5 di baris ini Atur xDCell = Sel(xCell.Row, 5) mewakili kolom E di mana Anda akan menempatkan nilai sebelumnya. A:A mengacu pada sel di kolom A. Anda perlu menyimpan nilai sebelumnya dari sel ini.

Dim xRg As Range
'Updated by Extendoffice 20220803
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
    Dim X
    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, 5)
        
        xDCell.NumberFormatLocal = xCell.NumberFormatLocal
        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("A:A"))
    End If
Label1:
    Set xRg = Intersect(Target, Range("A:A"))
    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 ' xRgArea(J).Formula
        Next
    Next
    Set xChangeRg = Nothing
    Set xRg = Nothing
    Set xDependRg = Nothing
    Application.EnableEvents = True
End Sub
Komentar ini diminimalkan oleh moderator di situs
hanya berfungsi saat memasukkan data secara manual
tetapi tidak berfungsi saat data disegarkan dari situs web
tolong bantu
Terima kasih
Komentar ini diminimalkan oleh moderator di situs
menyimpan data sebelumnya saat memasukkan secara manual tetapi tidak berfungsi saat data menyegarkan dari situs web, itu tidak melakukan apa-apa
tolong bantu
Terima kasih
Komentar ini diminimalkan oleh moderator di situs
Hai Kamal.
Masalah ini agak rumit. Setelah mencoba berbagai metode, saya tidak bisa mengatasinya. Saya minta maaf untuk itu.
Komentar ini diminimalkan oleh moderator di situs
Adakah yang bisa membantu tubuh dalam masalah ini?
Belum ada komentar yang diposting di sini
Tinggalkan komentar anda
Posting sebagai Tamu
×
Beri peringkat pos ini:
0   Karakter
Lokasi yang Disarankan

Ikuti kami

Hak Cipta © 2009 - www.extendoffice.com. | Seluruh hak cipta. Dipersembahkan oleh ExtendOffice. | Peta Situs
Microsoft dan logo Office adalah merek dagang atau merek dagang terdaftar dari Microsoft Corporation di Amerika Serikat dan / atau negara lain.
Dilindungi oleh Sectigo SSL