Como guardar ou recuperar o valor anterior de uma célula modificada no Excel?
Ao editar uma célula no Excel, o valor anterior é substituído imediatamente e deixa de ser visível, salvo se anular a alteração. Caso precise preservar esse valor — seja para comparação, auditoria ou recuperação — pode capturá-lo automaticamente com uma pequena rotina VBA que regista o conteúdo anterior numa coluna auxiliar antes de cada modificação. Alternativamente, se o ficheiro estiver guardado no OneDrive ou SharePoint, pode utilizar as ferramentas do Microsoft 365, como “Mostrar Alterações” e “Histórico de Versões”, para rever as modificações efetuadas. Este tutorial apresenta ambas as abordagens, permitindo-lhe escolher a que melhor se adapta ao seu fluxo de trabalho e aos seus requisitos de governança.
➤ Microsoft 365 — Revise os valores anteriores e atualizados das células com Mostrar Alterações e Histórico de Versões
Guardar o valor anterior da célula com código VBA no Excel
Imagine que tem uma tabela como a apresentada na imagem seguinte. Sempre que uma célula na coluna C for editada, poderá querer guardar o seu valor anterior na célula correspondente da coluna G ou adicioná-lo automaticamente como um Comentário, para referência e revisão futuras. Esta abordagem revela-se especialmente útil quando pretende manter um registo contínuo ou consultar valores antigos durante a introdução contínua de dados ou verificações de qualidade.

Cenário-chave: Em folhas de cálculo onde revê ou reconcilia frequentemente alterações — como inventários, registos ou controlo financeiro — manter os valores anteriores visíveis pode economizar tempo e minimizar a perda acidental de dados.
Para começar, abra a folha de cálculo onde pretende registar os valores anteriores. Depois, siga estes passos:
1. Clique com o botão direito do rato no separador da folha e selecione «Ver Código» no menu de atalho. O Editor do Visual Basic para Aplicações (VBA) abrirá automaticamente. Veja a imagem:

2. Na janela «Microsoft Visual Basic para Aplicações», cole o seguinte código VBA na janela de código. Esta macro guarda automaticamente o valor anterior das células da coluna de destino noutra coluna.
Antes de executar este script, certifique-se de ajustar as referências das colunas de destino no código. Nestes exemplos, «C:C» refere-se à coluna monitorizada quanto a alterações e o número "7" corresponde à coluna G, onde são armazenados os valores anteriores. Pode personalizar estas referências de acordo com o seu layout.
Código VBA: Guardar o valor anterior da célula noutra célula da coluna
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 situações em que seja preferível armazenar o valor anterior como um Comentário — útil para visualização rápida e anotação — o seguinte código VBA realiza esta tarefa automaticamente sempre que uma célula na coluna de destino for alterada:
Código VBA: Guardar o valor anterior da célula no comentário
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:
- O número 7 em
Cells(xCell.Row,7)refere-se à coluna G. Altere este valor se quiser guardar o valor anterior noutra coluna. Range("C:C")define a coluna cujas alterações serão rastreadas. Ajuste conforme necessário — por exemplo, use «D:D» para a coluna D.
3. Para ativar o suporte de dicionário para o script, aceda a «Ferramentas» > «Referências...» no editor do VBA. Na caixa de diálogo «Referências – VBAProject» que surgir, marque «Microsoft Scripting Runtime» e clique em «OK», conforme ilustrado:

4. Prima «Alt» + «Q» para fechar o editor do VBA e regressar à sua folha de cálculo.
A partir deste momento, sempre que um valor na coluna C for alterado, o Excel copiará automaticamente o seu valor anterior para a coluna G ou adicioná-lo-á ao comentário da célula — permitindo-lhe acompanhar e validar facilmente as alterações, com os dados históricos sempre acessíveis para revisão, auditoria ou correção de erros.
Exemplo de resultado ao guardar valores anteriores das células noutras células:

Exemplo de resultado ao guardar valores anteriores das células em comentários:

Dicas e resolução de problemas:
- Se as macros VBA não funcionarem como esperado, verifique as definições de segurança das macros em «Ficheiro» > «Opções» > «Centro de Confiança» > «Definições de Macros» e selecione «Ativar todas as macros».
- Revise as referências das suas colunas caso os valores não estejam a ser registados na localização pretendida.
- Se os erros persistirem, certifique-se de que a biblioteca «Microsoft Scripting Runtime» está corretamente ativada, conforme indicado acima.
Microsoft 365 — Revise os valores anteriores e atualizados das células com Mostrar Alteraçõese Histórico de Versões
No Microsoft 365, pode auditar edições — saber quem alterou o quê e quando, incluindo os valores anteriores e atualizados — sem recorrer ao legado Controlo de Alterações. Utilize Mostrar Alterações para obter detalhes ao nível da célula e Histórico de Versões para instantâneos completos do ficheiro e restaurações.
Requisitos
- Livro guardado no OneDrive ou no SharePoint.
- Sessão iniciada com uma conta Microsoft 365; Guardar Automaticamente ativado, Ativado.
- Formato moderno ().xlsx); sem utilização do Livro Partilhado (Legado).
Mostrar Alterações (auditoria ao nível da célula)
1. Abra o livro guardado na cloud e vá a Rever ▸ Mostrar Alterações para abrir o painel.
2. (Opcional) Selecione primeiro uma folha ou um intervalo para delimitar os resultados.
3. Navegue pelas entradas para ver o editor, a marca temporal e os valores antigo → novo; clique numa entrada para saltar diretamente para a célula.
Histórico de Versões (comparar e restaurar)
1. Vá a Ficheiro ▸ Informações ▸ Histórico de Versões.
2. Abra uma versão anterior para comparar; copie células ou clique em Restaurar para reverter todo o ficheiro.
- O comando Mostrar Alterações está indisponível?Guarde o ficheiro no OneDrive ou SharePoint, ative o Guardar Automaticamente, converta-o a partir do Modo de Compatibilidade ()Ficheiro ▸ Informações ▸ Converter) e certifique-se de que o Livro Partilhado (Legado) está desativado. Se o problema persistir na versão de ambiente de trabalho, experimente utilizar o Excel para a web.
- Segurança/bloqueios: A proteção do livro ou da folha de cálculo, a encriptação ou o IRM podem desativar a funcionalidade Mostrar Alterações.
- Ficheiros locais: O histórico completo não é mantido para ficheiros exclusivamente locais; utilize o Histórico de Versões na cloud para obter os melhores resultados.
- Precisa de valores escritos nas células? As funcionalidades Mostrar Alterações e Histórico de Versões são ferramentas de auditoria; para gravar o «valor anterior» numa coluna auxiliar sempre que uma célula for editada, utilize um pequeno registo VBA
Worksheet_Change.
Vantagens
- Auditoria automática de quem fez o quê e quando, com comparação entre valores anteriores e atualizados — sem necessidade de macros.
- Multiplataforma (Windows, Mac, web) quando guardado no OneDrive/SharePoint.
Desvantagens
- Requer armazenamento na cloud e Guardar Automaticamente; detalhe limitado a algumas edições transitórias.
- Não preenche valores anteriores nas células; utilize VBA se for necessário para a lógica comercial.
As Melhores Ferramentas de Produtividade para o Office
Potencie as suas competências no Excel com Kutools para Excel e experimente uma eficiência como nunca antes.Kutools para Excel Oferece mais de 300 funcionalidades avançadas para impulsionar a produtividade e Economizar Tempo.Clique aqui para obter a funcionalidade de que mais precisa...
Office Tab Traz uma interface com separadores para o Office e torna o seu trabalho muito mais fácil
- Ative a edição e leitura com separadores no Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Abra e crie vários documentos em novos separadores da mesma janela, em vez de em janelas separadas.
- Aumente a sua produtividade em 50 % e elimine centenas de cliques do rato todos os dias!
Todos os suplementos Kutools — num único instalador.
Kutools for Office reúne suplementos para Excel, Word, Outlook e PowerPoint, além do Office Tab Pro, sendo a solução ideal para equipas que trabalham em várias aplicações do Office.
- Pacote tudo-em-um— suplementos para Excel, Word, Outlook e PowerPoint + Office Tab Pro
- Um instalador, uma licença— configuração em minutos (pronto para MSI)
- Funciona melhor em conjunto— produtividade simplificada em todas as aplicações do Office
- Teste gratuito de 30 dias com todas as funcionalidades— sem registo, sem cartão de crédito
- Melhor relação qualidade-preço— poupe face à compra individual dos suplementos