Me parece que la única forma de restingirlo es protegiendo la celda, pero en este caso no te serviría por que necesitas que el usuario lo complete.
Lo que se me ocurre que podes hacer es cargar una macro en la hoja que chequee lo que colocaron, si es diferente al valor que corresponde que lo elimine y le ponga la data validation
Para incorporar la macro debes abrir el asistente de visual basic (ALT+F11)
Elegir la hoja correcta y colocar la sigueinte macro:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim CPSh As Worksheet
'Defino la hoja'
Set CPSh = Sheets("Hoja1")
'Verifico si estoy en la columna 3'
If Target.Column = 3 Then
'Chequea el valor que tiene la celda'
If Target = "" Or Target = "Hola" Or Target = "Chau" Then
Else
'Vaciar el contenido de la celda'
CPSh.Cells(Target.Row, Target.Column).Value = ""
'Agregar DataValidation'
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="""Hola"";""Chau"""
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End If
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim CPSh As Worksheet
'Defino la hoja'
Set CPSh = Sheets("Hoja1")
'Verifico si estoy en la columna 3'
If Target.Column = 3 Then
'Chequea el valor que tiene la celda'
If Target = "" Or Target = "Hola" Or Target = "Chau" Then
Else
'Vaciar el contenido de la celda'
CPSh.Cells(Target.Row, Target.Column).Value = ""
'Agregar DataValidation'
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="""Hola"";""Chau"""
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End If
End If
End Sub
Por Favor recuerda valorar la respuesta!
Slds
Juan