変更を記録する (値変更時にセルにメモを付与する)

値を変更すると、そのセルにメモ(コメント)を付与するマクロです。変更履歴機能と似ていますが、このマクロは履歴ではなく変更の有無を確認することを目的としています。

値変更時にメモを付与

元の値に戻すとメモは削除されて「変更なし」状態になります
(変更履歴機能では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 関数で変換のうえ比較しています。

メモの代わりに、変更前の値を保持するための列を設けてもよいでしょう。

記録のオン/オフの切り替え

上記マクロでは記録のオン/オフ機能は含めていません。特定のシート名の場合だけ発動するようにしたり、オン/オフスイッチ用のセルを設けるなど、必要に応じて機能を追加してもよいでしょう。

 

タイトルとURLをコピーしました