Jak si zapamatovat nebo uložit předchozí hodnotu buňky změněné buňky v aplikaci Excel?
Při aktualizaci buňky s novým obsahem bude obvykle předchozí hodnota pokryta, pokud operaci nevrátíte zpět v aplikaci Excel. Pokud však chcete zachovat předchozí hodnotu pro porovnání s aktualizovanou, bude dobrou volbou uložení předchozí hodnoty buňky do jiné buňky nebo do komentáře k buňce. Metoda v tomto článku vám pomůže toho dosáhnout.
Uložit předchozí hodnotu buňky pomocí kódu VBA v aplikaci Excel
Uložit předchozí hodnotu buňky pomocí kódu VBA v aplikaci Excel
Předpokládejme, že máte tabulku uvedenou níže. Pokud se některá buňka ve sloupci C změnila, chcete uložit její předchozí hodnotu do odpovídající buňky ve sloupci G nebo automaticky uložit do komentáře. K dosažení tohoto cíle prosím postupujte následovně.
1. V listu obsahuje hodnotu, kterou uložíte při aktualizaci, klikněte pravým tlačítkem na kartu listu a vyberte Zobrazit kód z nabídky pravého tlačítka myši. Viz screenshot:
2. V otvoru Microsoft Visual Basic pro aplikace zkopírujte níže uvedený kód VBA do okna Kód.
Následující kód VBA vám pomůže uložit předchozí hodnotu buňky zadaného sloupce do jiného sloupce.
Kód VBA: Uložit předchozí hodnotu buňky do jiné buňky sloupce
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
Chcete-li uložit předchozí hodnotu buňky do komentáře, použijte níže uvedený kód VBA
Kód VBA: Uložte předchozí hodnotu buňky do komentáře
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
Pozor: V kódu číslo 7 označuje sloupec G, do kterého uložíte předchozí buňku, a C: C je sloupec, ve kterém uložíte hodnotu předchozí buňky. Změňte je prosím podle svých potřeb.
3. cvaknutí Tools > Reference k otevření Reference - VBAProject V dialogovém okně zaškrtněte Microsoft Scripting Runtime a nakonec klikněte na OK knoflík. Viz screenshot:
4. zmáčkni Další + Q klávesy pro zavření Microsoft Visual Basic pro aplikace okno.
Od této chvíle, když se hodnota buňky ve sloupci C aktualizuje, předchozí hodnota buňky se uloží do odpovídajících buněk ve sloupci G nebo se uloží do komentáře, jak ukázaly níže uvedené snímky obrazovky.
Uložit hodnoty předchozí buňky do jiných buněk:
Uložit předchozí hodnoty buněk do komentářů:
Nejlepší nástroje pro produktivitu v kanceláři
Rozšiřte své dovednosti Excel pomocí Kutools pro Excel a zažijte efektivitu jako nikdy předtím. Kutools for Excel nabízí více než 300 pokročilých funkcí pro zvýšení produktivity a úsporu času. Kliknutím sem získáte funkci, kterou nejvíce potřebujete...
Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci
- Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
- Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
- Zvyšuje vaši produktivitu o 50%a snižuje stovky kliknutí myší každý den!