Private Sub Worksheet_Change(ByVal Target As Range)
Dim cel As Range, cel1 As Range, rgVals As Range, dvSource As Range
Dim s As String
Set rgVals = [A1:A10] 'The data validation dropdowns are in A1:A10
'Set rgVals = Union([A1],[A3],[A5:A8]) 'Alternate way to specify location of validation dropdowns
If Intersect(Target, rgVals) Is Nothing Then Exit Sub
'Build validation source string
Set dvSource = Range("DataValSource") 'The source of data validation is a named range DataValSource
For Each cel In dvSource.Cells
If cel <> "" Then
Set cel1 = Nothing
Set cel1 = rgVals.Find(cel)
If cel1 Is Nothing Then s = s & "," & cel 'Add items to source string only if not already selected
End If
Next
If s <> "" Then s = Mid$(s, 2)
If s = "" Then s = " " 'If all values have been used, then the "source" will be a single space
'Update the validation source for each cell in rgVals
For Each cel In rgVals.Cells
cel.Validation.Delete
cel.Validation.Add xlValidateList, , , cel & "," & s
Next
End Sub