Maybe something like this in the worksheet code.
Dim PrevValue
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, cell As Range
Dim cmt As Comment
Dim o As String, n As String
On Error GoTo errHandler
Set rng = Range("I16:I36")
If Target.Count = 1 And Target.Address = "$M$1" Then
If IsEmpty(PrevValue) Then
Application.EnableEvents = False
Application.Undo
Else
If Target.Value <> PrevValue And (UCase(Target.Value) = "NEW" Or UCase(Target.Value) = "OLD") Then
Application.EnableEvents = False
For Each cell In rng.Cells
With cell
o = .Value
Set cmt = .Comment
If Not cmt Is Nothing Then
n = cmt.Text
.Comment.Delete
If Len(n) Then
.Value = n
If Len(o) Then .AddComment o
End If
End If
End With
Next
End If
End If
End If
Application.EnableEvents = True
PrevValue = [M1].Value
Exit Sub
errHandler:
MsgBox Err.Description, vbCritical
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
PrevValue = [M1].Value
End Sub
Bookmarks