シート内のどのセルが変更されたか記録したい場合(別シートに記録)

以下のイベントマクロを管理したいシートに記述します。

記録用に別シート(例では「書換履歴」シート)を作成します。

 

'********************************************************

Private Sub Worksheet_Change(ByVal Target As Range)
'********************************************
'書き替えた行列を「書換履歴」シートに記録する
'複数範囲一括書換に対応
'********************************************
   Dim r As Range
   Dim i As Long
    i = Sheets("書換履歴").Cells(Rows.Count, 1).End(xlUp).Row
        For Each r In Target
           Sheets("書換履歴").Cells(i + 1, 1) = Date
           Sheets("書換履歴").Cells(i + 1, 2) = r.Row
           Sheets("書換履歴").Cells(i + 1, 3) = r.Column
          i = i + 1
        Next
End Sub

'********************************************************

また、同じセルに何度も書き換えたりした場合

重複しているセル情報を削除するマクロは以下になります。

'********************************************************

Sub 重複削除()
  Dim maxRow As Long  
  '重複しているデータを削除

maxRow = Sheets("書換履歴").Cells(Rows.Count, 1).End(xlUp).Row
  Sheets("書換履歴").Range("A1:C" & maxRow).RemoveDuplicates (Array(2, 3))

End Sub

 

イベントマクロを一時的に停止しておきたい場合には・・・

'********************************************************

Sub EventOn()
      Application.EnableEvents = True
End Sub
Sub EventOff()
      Application.EnableEvents = False
End Sub

 

またいつまでも記録した状態ではデータが積もり積もって

大変なことに

'********************************************************

Sub クリア()
Sheets("書換履歴").Range("A:C").Clear

Sheets("書換履歴").Range("A1").Value = "日付"
Sheets("書換履歴").Range("B1").Value = "行"
Sheets("書換履歴").Range("C1").Value = "列"
End Sub

 

 

利用シーンはかなりありそうですが・・・