変更されたセルの値と比較するために、シートの「ミラーコピー」を別のシートに自動的に保持することをお勧めします。
@brettdjと@JohnLBevanは基本的に同じことを提案しますが、セルの値をそれぞれコメントまたは辞書に格納します(実際、これらのアイデアの場合は+1)。ただし、他のオブジェクト(特に、ユーザーまたはユーザーが他の目的で使用する可能性のあるコメント)ではなく、セル内のセルをバックアップする方が概念的にはるかに簡単だと思います。
つまり、Sheet1
ユーザーが変更できるセルがあるとします。私はこの別のシートを作成Sheet1_Mirror
しました(これはで作成できWorkbook_Open
、必要に応じて非表示に設定できます-あなた次第です)。まず、の内容はの内容Sheet1_Mirror
と同じになりSheet1
ます(ここでも、でこれを強制できますWorkbook_Open
)。
がトリガーされるたびに、コードはSheet1
のWorksheet_Change
「変更された」セルの値Sheet1
が実際にの値と異なるかどうかをチェックしSheet1_Mirror
ます。もしそうなら、それはあなたが望む行動をし、ミラーシートを更新します。そうでない場合は、何もしません。
これにより、正しい方向に進むはずです。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim r As Range
For Each r In Target.Cells
'Has the value actually changed?
If r.Value <> Sheet1_Mirror.Range(r.Address).Value Then
'Yes it has. Do whatever needs to be done.
MsgBox "Value of cell " & r.Address & " was changed. " & vbCrLf _
& "Was: " & vbTab & Sheet1_Mirror.Range(r.Address).Value & vbCrLf _
& "Is now: " & vbTab & r.Value
'Mirror this new value.
Sheet1_Mirror.Range(r.Address).Value = r.Value
Else
'It hasn't really changed. Do nothing.
End If
Next
End Sub