¿Cómo recordar o guardar el valor de celda anterior de una celda modificada en Excel?
Normalmente, al actualizar una celda con nuevo contenido, se cubrirá el valor anterior a menos que se deshaga la operación en Excel. Sin embargo, si desea conservar el valor anterior para compararlo con el actualizado, guardar el valor de celda anterior en otra celda o en el comentario de celda será una buena opción. El método de este artículo te ayudará a lograrlo.
Guarde el valor de celda anterior con el código VBA en Excel
Guarde el valor de celda anterior con el código VBA en Excel
Supongamos que tiene una tabla como se muestra a continuación. Si alguna celda de la columna C cambió, desea guardar su valor anterior en la celda correspondiente de la columna G o guardarlo en el comentario automáticamente. Haga lo siguiente para lograrlo.
1. En la hoja de trabajo que contiene el valor que guardará al actualizar, haga clic con el botón derecho en la pestaña de la hoja y seleccione Ver código desde el menú contextual. Ver captura de pantalla:
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, copie el siguiente código VBA en la ventana Código.
El siguiente código de VBA lo ayuda a guardar el valor de celda anterior de la columna especificada en otra columna.
Código de VBA: guarde el valor de celda anterior en otra celda de columna
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
Para guardar el valor de la celda anterior en un comentario, aplique el siguiente código VBA
Código de VBA: guarde el valor de celda anterior en el comentario
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: En el código, el número 7 indica la columna G en la que guardará la celda anterior, y C: C es la columna en la que guardará el valor de la celda anterior. Cámbielos según sus necesidades.
3. Hacer clic en Herramientas > Referencias para abrir el Referencias - VBAProject cuadro de diálogo, verifique Tiempo de ejecución de secuencias de comandos de Microsoft cuadro, y finalmente haga clic en el OK botón. Ver captura de pantalla:
4. presione el otro + Q llaves para cerrar el Microsoft Visual Basic para aplicaciones ventana.
A partir de ahora, cuando se actualice el valor de la celda en la columna C, el valor anterior de la celda se guardará en las celdas correspondientes en la columna G, o se guardará en el comentario como se muestra a continuación.
Guardar valores de celda anteriores en otras celdas:
Guarde los valores de celda anteriores en los comentarios:
Las mejores herramientas de productividad de oficina
Mejore sus habilidades de Excel con Kutools for Excel y experimente la eficiencia como nunca antes. Kutools for Excel ofrece más de 300 funciones avanzadas para aumentar la productividad y ahorrar tiempo. Haga clic aquí para obtener la función que más necesita...
Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil
- Habilite la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
- Abra y cree varios documentos en nuevas pestañas de la misma ventana, en lugar de en nuevas ventanas.
- ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!