¿Cómo guardar o recordar el valor anterior de una celda que se ha modificado en Excel?
Al editar una celda en Excel, el valor anterior se sobrescribe de inmediato y deja de ser visible, salvo que deshaga la acción. Si necesita conservar ese valor —por ejemplo, para compararlo, auditarlo o revertirlo—, puede capturarlo automáticamente mediante una breve rutina de VBA que lo registre en una columna auxiliar antes de cada modificación. Otra opción es revisar los cambios con las herramientas de Microsoft 365 (como *Mostrar cambios* e *Historial de versiones*) cuando el archivo esté guardado en OneDrive o SharePoint. Este tutorial explica ambos enfoques para que elija el que mejor se adapte a su flujo de trabajo y a sus necesidades de gobernanza.
➤ Herramientas de Microsoft 365 — Revise los valores anteriores y actualizados de las celdas con Mostrar cambios e Historial de versiones
Guardar el valor anterior de una celda con código VBA en Excel
Suponga que tiene una tabla como la que se muestra en la siguiente captura de pantalla. Cada vez que edite cualquier celda de la columna C, es posible que desee capturar su valor anterior en la celda correspondiente de la columna G o añadir automáticamente ese valor antiguo como comentario, para facilitar su consulta y revisión futuras. Este enfoque resulta especialmente útil cuando necesita mantener un registro continuo o acceder a valores anteriores durante la introducción constante de datos o las comprobaciones de calidad.

Escenario clave: En hojas de cálculo donde revise o concilie cambios con frecuencia, como inventarios, registros o seguimiento financiero, mantener visibles los valores anteriores puede ahorrar tiempo y minimizar la pérdida accidental de datos.
Para empezar, abra la hoja de cálculo en la que quiera registrar los valores anteriores. A continuación, siga estos pasos:
1. Haga clic con el botón derecho en la pestaña de la hoja y seleccione «Ver código» en el menú contextual. Se abrirá el Editor de Visual Basic para Aplicaciones (VBA). Vea la captura de pantalla:

2. En la ventana «Microsoft Visual Basic para Aplicaciones», pegue el siguiente código VBA en la ventana de código. Esta macro guardará automáticamente el valor anterior de las celdas de la columna objetivo en otra columna.
Antes de ejecutar este script, asegúrese de ajustar las referencias de las columnas objetivo en el código. En estos ejemplos, «C:C» hace referencia a la columna cuyos cambios se supervisan, y el número «7» corresponde a la columna G, donde se almacenan los valores anteriores. Puede personalizar estas referencias según su diseño.
Código VBA: Guardar el valor anterior de una celda 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 En situaciones en las que prefiera almacenar el valor anterior como Comentario —útil para visualización rápida y anotaciones—, el siguiente código VBA lo realiza automáticamente cada vez que se modifica una celda de la columna objetivo:
Código VBA: Guardar el valor anterior de una celda 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 Notas sobre parámetros:
- El número 7 en
Cells(xCell.Row,7)hace referencia a la columna G. Cámbielo si desea guardar el valor anterior en otra columna. Range("C:C")define la columna que se supervisará para detectar cambios. Ajústela según sea necesario; por ejemplo, use «D:D» para la columna D.
3. Para habilitar la compatibilidad con diccionarios en el script, vaya a «Herramientas» > «Referencias...» en el editor de VBA. En el cuadro de diálogo «Referencias – VBAProject» que aparece, active la casilla «Microsoft Scripting Runtime» y haga clic en «Aceptar», tal como se muestra:

4. Pulse «Alt» + «Q» para cerrar el editor de VBA y regresar a su hoja de cálculo.
A partir de ahora, cada vez que se modifique un valor en la columna C, Excel copiará automáticamente su valor anterior en la columna G o lo añadirá al comentario de la celda, permitiéndole realizar un seguimiento y validar los cambios de forma sencilla y garantizando que los datos históricos estén siempre accesibles para revisión, auditoría o corrección de errores.
Ejemplo de resultado al guardar los valores anteriores de las celdas en otras celdas:

Ejemplo de resultado al guardar los valores anteriores de las celdas en comentarios:

Consejos y solución de problemas:
- Si las macros de VBA no funcionan como se espera, compruebe la configuración de seguridad de macros en «Archivo» > «Opciones» > «Centro de confianza» > «Configuración de macros» y seleccione «Habilitar todas las macros».
- Revise sus referencias de columnas si los valores no se están registrando en la ubicación prevista.
- Si los errores persisten, asegúrese de que la biblioteca «Microsoft Scripting Runtime» esté correctamente habilitada tal como se indicó anteriormente.
Herramientas de Microsoft 365 — Revise los valores anteriores y actualizados de las celdas con Mostrar cambiosy Historial de versiones
En Microsoft 365, puede auditar ediciones (quién cambió qué y cuándo, incluidos los valores anteriores y posteriores) sin necesidad de usar el modo heredado Control de cambios. Utilice Mostrar cambios para obtener detalles a nivel de celda y Historial de versiones para instantáneas completas del archivo y restauraciones.
Requisitos
- Libro guardado en OneDrive o SharePoint.
- Sesión iniciada con una cuenta de Microsoft 365; AutoGuardado activado, Activado.
- Formato moderno ().xlsx); no utiliza el modo heredado Libro compartido (heredado).
Mostrar cambios (auditoría a nivel de celda)
1. Abra el libro guardado en la nube y vaya a Revisar ▸ Mostrar cambios para abrir el panel.
2. (Opcional) Seleccione primero una hoja o un rango para delimitar los resultados.
3. Revise las entradas para ver el editor, la marca de tiempo y los valores antiguo → nuevo; haga clic en una entrada para ir directamente a la celda.
Historial de versiones (comparar y restaurar)
1. Vaya a Archivo ▸ Información ▸ Historial de versiones.
2. Abra una versión anterior para compararla; copie celdas o haga clic en Restaurar para revertir todo el archivo.
- ¿Está atenuado Mostrar cambios?Guarde en OneDrive o SharePoint, active AutoGuardado, convierta desde el modo de compatibilidad ()Archivo ▸ Información ▸ Convertir) y asegúrese de que Libro compartido (heredado) esté desactivado. Si la opción sigue sin estar disponible en la versión de escritorio, pruebe Excel para la web.
- Seguridad/bloqueos: La protección del libro o de la hoja, el cifrado o la IRM pueden desactivar la opción Mostrar cambios.
- Archivos locales: No se conserva un historial completo para archivos puramente locales; utilice el Historial de versiones en la nube para obtener los mejores resultados.
- ¿Necesita que los valores se escriban directamente en las celdas?Mostrar cambios e Historial de versiones son herramientas de auditoría; para registrar el «valor anterior» en una columna auxiliar cada vez que se edite una celda, utilice un pequeño
Worksheet_Changeregistrador en VBA.
Ventajas
- Auditoría automática de quién y cuándo, con valores anteriores y posteriores; sin necesidad de macros.
- Multiplataforma (Windows, Mac y web) al almacenarse en OneDrive o SharePoint.
Desventajas
- Requiere almacenamiento en la nube y AutoGuardado; el detalle está limitado para algunas ediciones transitorias.
- No rellenes las celdas con los valores anteriores; utiliza VBA si es necesario para la lógica empresarial.
Las mejores herramientas de productividad para Office
Potencie sus habilidades en Excel con Kutools para Excel y experimente una eficiencia como nunca antes.Kutools para Excel ofrece más de 300 funciones avanzadas para aumentar su productividad y Ahorrar tiempo.Haga clic aquí para obtener la función que más necesita...
Office Tab aporta una interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil
- Active 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 dentro de la misma ventana, en lugar de hacerlo en ventanas separadas.
- ¡Aumente su productividad en un 50 % y elimine cientos de clics del ratón cada día!
Todos los complementos de Kutools en un solo instalador.
Kutools for Office es la suite que incluye complementos para Excel, Word, Outlook y PowerPoint, además de Office Tab Pro, ideal para equipos que trabajan en distintas aplicaciones de Office.
- Suite integral— complementos para Excel, Word, Outlook y PowerPoint + Office Tab Pro
- Un instalador, una licencia— configuración en minutos (compatible con MSI)
- Rendimiento mejorado en conjunto— productividad optimizada en todas las aplicaciones de Office
- Prueba gratuita de 30 días con todas las funciones— sin registro ni tarjeta de crédito
- La mejor relación calidad-precio— ahorre frente a la compra individual de complementos