Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
Application.EnableEvents = False
If Not IsDate(Target) Then Target = "": GoTo fin
If Day(Target) <> 15 And (Day(Target) <> Day(DateSerial(Year(Target), Month(Target) + 1, 0))) Then Target = ""
fin:
Application.EnableEvents = True
End Sub