Note: The other languages of the website are Google-translated. Back to English
Inloggen  \/ 
x
or
x
Registreer  \/ 
x

or

Hoe kan ik de vorige celwaarde van een gewijzigde cel in Excel onthouden of opslaan?

Normaal gesproken wordt bij het bijwerken van een cel met nieuwe inhoud de vorige waarde gedekt, tenzij u de bewerking in Excel ongedaan maakt. Als u echter de vorige waarde wilt behouden om te vergelijken met de bijgewerkte waarde, is het een goede keuze om de vorige waarde op te slaan in een andere cel of in de celcommentaar. De methode in dit artikel zal u helpen om dit te bereiken.

Sla de vorige celwaarde op met VBA-code in Excel


Sla de vorige celwaarde op met VBA-code in Excel


Stel dat u een tabel heeft zoals hieronder afgebeeld. Als een cel in kolom C is gewijzigd, wilt u de vorige waarde opslaan in de overeenkomstige cel van kolom G of automatisch opslaan in commentaar. Ga als volgt te werk om dit te bereiken.

1. Bevat in het werkblad de waarde die u bij het bijwerken opslaat, klik met de rechtermuisknop op de bladtab en selecteer Bekijk code vanuit het rechtsklikmenu. Zie screenshot:

2. In de opening Microsoft Visual Basic voor toepassingen -venster, kopieer de onderstaande VBA-code naar het codevenster.

De volgende VBA-code helpt u de vorige celwaarde van de opgegeven kolom op te slaan in een andere kolom.

VBA-code: sla de vorige celwaarde op in een andere kolomcel

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

Pas de onderstaande VBA-code toe om de vorige celwaarde in een opmerking op te slaan

VBA-code: sla de vorige celwaarde op in de opmerking

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

Opmerking:: In de code geeft nummer 7 de kolom G aan waarin u de vorige cel wilt opslaan, en C: C is de kolom waarin u de vorige celwaarde wilt opslaan. Wijzig ze op basis van uw behoeften.

3. klikken Toolbox > Referenties om de te openen Refereces - VBAProject dialoogvenster, controleer de Microsoft Scripting Runtime vak en klik ten slotte op het OK knop. Zie screenshot:

4. druk de anders + Q toetsen om de Microsoft Visual Basic voor toepassingen venster.

Vanaf nu, wanneer de celwaarde in kolom C wordt bijgewerkt, wordt de vorige waarde van de cel opgeslagen in de corresponderende cellen in kolom G of opgeslagen in commentaar zoals hieronder weergegeven screenshots.

Sla de vorige waarde op in een andere cel:

Bewaar vorige waarde in opmerking:


De beste tools voor kantoorproductiviteit

Kutools voor Excel lost de meeste van uw problemen op en verhoogt uw productiviteit met 80%

  • visfuik: Snel invoegen complexe formules, grafieken en alles wat je eerder hebt gebruikt; Versleutel cellen met wachtwoord; Maak een mailinglijst en stuur e-mails ...
  • Super Formula-balk (bewerk eenvoudig meerdere regels tekst en formule); Lay-out lezen (gemakkelijk grote aantallen cellen lezen en bewerken); Plakken in gefilterd bereik...
  • Voeg cellen / rijen / kolommen samen zonder gegevens te verliezen; Gespleten cellen inhoud; Combineer dubbele rijen / kolommen... Voorkom dubbele cellen; Vergelijk Ranges...
  • Selecteer Dupliceren of Uniek Rijen; Selecteer lege rijen (alle cellen zijn leeg); Super zoeken en fuzzy zoeken in veel werkboeken; Willekeurige selectie ...
  • Exacte kopie Meerdere cellen zonder de formuleverwijzing te wijzigen; Maak automatisch verwijzingen naar meerdere bladen; Plaats kogels, Selectievakjes en meer ...
  • Extraheer tekst, Tekst toevoegen, Verwijderen op positie, Ruimte verwijderen; Paging-subtotalen maken en afdrukken; Converteren tussen celinhoud en opmerkingen...
  • Super filter (bewaar en pas filterschema's toe op andere bladen); Geavanceerd sorteren per maand / week / dag, frequentie en meer; Speciaal filter door vet, cursief ...
  • Combineer werkmappen en werkbladen; Tabellen samenvoegen op basis van sleutelkolommen; Gegevens splitsen in meerdere bladen; Batch Converteer xls, xlsx en PDF...
  • Meer dan 300 krachtige functies. Ondersteunt Office / Excel 2007-2019 en 365. Ondersteunt alle talen. Eenvoudig te implementeren in uw onderneming of organisatie. Gratis proefperiode van 30 dagen met volledige functies. 60 dagen geld-terug-garantie.
kte tabblad 201905

Office-tabblad Brengt een interface met tabbladen naar Office en maakt uw werk veel gemakkelijker

  • Schakel bewerken en lezen met tabbladen in Word, Excel, PowerPoint in, Publisher, Access, Visio en Project.
  • Open en maak meerdere documenten in nieuwe tabbladen van hetzelfde venster in plaats van in nieuwe vensters.
  • Verhoogt uw productiviteit met 50% en vermindert elke dag honderden muisklikken voor u!
officetab onderkant
Say something here...
symbols left.
You are guest
or post as a guest, but your post won't be published automatically.
Loading comment... The comment will be refreshed after 00:00.
  • To post as a guest, your comment is unpublished.
    Kim Hyun Su · 2 months ago
    It is good if you type in.
    Can you help me to work it in when data is entered by using the value of function from DDE(Dynamic Data Exchange) as well?
  • To post as a guest, your comment is unpublished.
    Jennie · 4 months ago
    Is there a way to repeat this for all changes? I would like the Comments Box to show all of the previous entries if possible. 
  • To post as a guest, your comment is unpublished.
    FlemmingNissen · 1 years ago
    If the cell I want to save is a formula, the G cell will only save the formula, and calculate the value. I need to save the value - not the formula. How can I tell the VBA code, that the value changes although the formula is not changed. Best regards Flemming
  • To post as a guest, your comment is unpublished.
    Kedar0412 · 1 years ago
    This is for one cell value ,but how do for multiple cell value ,i want 4 cell data store and update like this for example C,D,E,F cell data into G,H,I,J cell respectively ,how can do please help
  • To post as a guest, your comment is unpublished.
    Manuel Vargas · 1 years ago
    Hello, so modified the "VBA code: Save previous cell value into another column cell" code you made, however I have a couple of questions:

    1. How does the code know which column has the new values? (which after another update would have its values out in the other column)
    2. How can you make this into a Macro? Or make it run automatically when another program calls the xlsm. file?

    Thanks
  • To post as a guest, your comment is unpublished.
    Age · 1 years ago
    Hi !

    Great function but how can it be modified to work also with a cell I want to memorize the value containing VLOOKUP ? Unfortunately I couldn't find what to modify to save the value from the VLOOKUP. As it is it doesn't work when VLOOKUP's are in the middle :(

    Thanks in advance for your help !
  • To post as a guest, your comment is unpublished.
    sahusantosh30@gmail.com · 1 years ago
    Why the above code is not working for DDE data, i have a data in a column which is changing through dde , but the moment i applied this code to save the previous value of that column into another column , its not doing anything ;

    Any help to achieve this is much appreciated .
  • To post as a guest, your comment is unpublished.
    OscarLopez · 2 years ago
    I was thinking about in a sentence "If/else" but I´m new using VBA, so if you have another post that could me help me, please share with me, and again thank you ! keep sharing the knowledge
  • To post as a guest, your comment is unpublished.
    OscarLopez · 2 years ago
    Hi ! I just wanted to know if it is possible register multiples changes to the cell, I mean, if I put data in the cell C2 and then I change that data for other information, the previous data pass to the cell G2 (like in this post), but If I change the value one more time in cell C2, the second change that I made pass to the cell H2 (for example) and now I registered the information of the 3 movements that I realized, and do it almost 5 times more (save the previous cell value 5 times). If you could help me I would appreciate so much because here in your post it´s the only place that I found where solve my problem partialy. Thanks for sharing this content!!!!

  • To post as a guest, your comment is unpublished.
    gustavo@apelidos.com.br · 3 years ago
    i need something like this, but only in specific cells (ex.: G12 to show in H23 the old value)
    • To post as a guest, your comment is unpublished.
      gustavo@apelidos.com.br · 3 years ago
      And other ... I need this run when a cell change by a result (EX.: A1 + B1 = C1... if I change A or B value, the script does not work - nothing happens in G cell)