シート内のどのセルが変更されたか記録したい場合(別シートに記録)
以下のイベントマクロを管理したいシートに記述します。
記録用に別シート(例では「書換履歴」シート)を作成します。
'********************************************************
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
利用シーンはかなりありそうですが・・・