just playing with your code, I get the following:
Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Count = 1 And .Column = 8 And .row < 600 Then If Sheets("Pins").Cells(.row, .Column).Value = "" Then Sheets("Parts- input").Cells(.row, 8).Comment.Delete Else If Sheets("Parts- input").Cells(.row, 8).Comment Is Nothing Then Sheets("Parts- input").Cells(.row, 8).AddComment "Lifts Sheet: " & Sheets("Pins").Cells(.row, .Column).Value Else Sheets("Parts- input").Cells(.row, 8).Comment.Text "Lifts Sheet: " & Sheets("Pins").Cells(.row, .Column).Value End If End If Else If Not Intersect(Target, Target.Parent.Range("H1:H599")) Is Nothing Then Dim runner As Range, rng As Range For Each runner In Intersect(Target, Target.Parent.Range("H1:H599")).Cells If Sheets("Pins").Cells(runner.row, 8).Value = "" Then If rng Is Nothing Then Set rng = Sheets("Parts- input").Cells(runner.Rows, 8) Else Set rng = Union(rng, Sheets("Parts- input").Cells(runner.Rows, 8)) End If End If End If Next rng.Comment.Delete End If End With End Sub
you can delete them directly, but having many cells, doing it in one step will be faster :)
EDIT enabled by Intersect to improve speed
source share