値を変更すると、そのセルにメモ(コメント)を付与するマクロです。変更履歴機能と似ていますが、このマクロは履歴ではなく変更の有無を確認することを目的としています。
元の値に戻すとメモは削除されて「変更なし」状態になります
(変更履歴機能では2度の変更として記録されるところです)
「反映」により履歴がクリアされることはありません
変更と同時にメモが付与されるので、確認しながら作業を進めるのに便利です
イベントプロシージャでメモを付与するマクロ
Option Explicit
Dim VAL As Variant
'============================
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
On Error GoTo ENDUP
If Intersect(Target, Range("変更管理")) Is Nothing Then Exit Sub
If Target.Cells.Count <> 1 Then Exit Sub
VAL = Target.Value
ENDUP:
End Sub
'============================
Private Sub Worksheet_Change(ByVal Target As Range)
Dim comVal As Variant 'メモテキスト
On Error Resume Next
If Intersect(Target, Range("変更管理")) Is Nothing Then Exit Sub
If Target.Cells.Count <> 1 Then Exit Sub
With Target
comVal = .Comment.Text
If IsEmpty(comVal) Then
'メモなし & 値が変化 → メモ作成
If .Value <> VAL Then .AddComment CStr(VAL)
Else
'メモあり & 値がメモと同じ → メモ削除
If CStr(.Value) = comVal Then .Comment.Delete
End If
End With
End Sub
補足・解説
このマクロは以下のトピックで紹介したものの応用版です。イベントプロシージャなどについてはこちらで解説しています。
値の判定方法
セルの値が変更されたかどうかをWorksheet_SelectionChange
プロシージャとWorksheet_Change
プロシージャで判定しています。また、それが変更前の値と同じかどうかをメモの内容で判定しています。
メモを使うことで、変更箇所と変更前の値の2つの情報を保持できるわけです。メモの内容はテキスト形式になるので CStr
関数で変換のうえ比較しています。
メモの代わりに、変更前の値を保持するための列を設けてもよいでしょう。
記録のオン/オフの切り替え
上記マクロでは記録のオン/オフ機能は含めていません。特定のシート名の場合だけ発動するようにしたり、オン/オフスイッチ用のセルを設けるなど、必要に応じて機能を追加してもよいでしょう。