Private Sub Worksheet_Change(ByVal Target As Range)
' First make sure the change was in col 3; otherwise we don't care.
Set oc = Target.Cells(1, 1) 'if more than one cell changed, we'll just look at the top left one
If oc.Column <> 3 Then Exit Sub 'the change wasn't in col 3; exit without comment
' Grab the values we want: worksheet, row, name.
Set owsL = Target.Worksheet 'we'll now get the worksheet from the Target argument
NewRow = oc.Row 'no more assuming the row by looking at the Selection
NewHotel = oc.Value 'save the new hotel name
' Now search for the hotel name elsewhere on the worksheet.
bFound = False 'initialize the match flag
For jr = 2 To 30 'loop through rows 2 to 30
If jr = NewRow Then GoTo IterateRow 'don't bother looking at the row with the new value
If owsL.Cells(jr, 3).Value <> NewHotel Then GoTo IterateRow 'not a match; next!
' We found a match:
bFound = True 'mark the match
Exit For 'discontinue the loop
IterateRow:
Next jr
' So we have a match, or not; now what?
If bFound Then
MsgBox "Match found on row " & jr
Else
Set owsN = ThisWorkbook.Worksheets.Add 'add a new worksheet
owsN.Name = NewHotel
End If
End Sub