(Estou no celular, por isso não posso fornecer uma resposta muito concreta agora).
Eu escrevi código exatamente para isso. Minha intenção era rastrear todas as alterações em uma planilha crítica editada por vários usuários. Se houvesse uma disputa sobre a origem dos dados, eu poderia revisar o registro. Aqui estão as peças do VBA que serão úteis.
O evento Worksheet_Change
será disparado toda vez que a planilha for alterada.
If Not Intersect(Target, Range("A1:G12")) Is Nothing
dirá se a (s) célula (s) que mudou (m) está (m) dentro de algum intervalo de interesse.
É mais rápido armazenar os valores que você deseja registrar em uma matriz e definir um intervalo em sua planilha de log para ser igual a essa matriz, em vez de definir cada célula na planilha de registro individualmente.
Pegue uma facada e veja o quão longe você está. Eu posso ser um pouco mais detalhado amanhã.
Próximo dia Editar
Aqui está um código que assistirá ao intervalo A1:G12
em qualquer folha que tenha o código nele. Se r
for a linha que foi alterada, o código copiará tudo de Ar:Gr
em uma planilha cujo nome de código é shtLog
. (O nome do código é o nome mostrado no VBA, não o nome na guia que você vê no Excel.) Isso deve fazer com que você se mova na direção certa.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Integer
Dim c As Integer
Dim arr(1 To 1, 1 To 12)
If Not Intersect(Target, Range("A1:G12")) Is Nothing Then
r = Target.Row
For c = 1 To 12
arr(1, c) = Cells(r, c).Value
Next
With shtLog
.Range(.Cells(.UsedRange.Rows.Count + 1, 1), .Cells(.UsedRange.Rows.Count + 1, 12)) = arr
End With
End If
End Sub