Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo 1
Dim Oldvalue$, Newvalue$
With Target
If .CountLarge > 1 Then Exit Sub
If Intersect(Target, [C30:DC30]) Is Nothing Then Exit Sub
If .SpecialCells(xlCellTypeAllValidation) Is Nothing Then Exit Sub
Newvalue = .Value: If Newvalue = "" Then Exit Sub
Application.EnableEvents = False
Application.Undo: Oldvalue = .Value
If Oldvalue = "" Then
.Value = Newvalue
Else
.Value = Oldvalue
If InStr(Oldvalue, Newvalue) = 0 Then .Value = .Value & ", " & Newvalue
End If
End With
1 Application.EnableEvents = True
End Sub