For this solution, it is highly recommended that cell S1 be a header instead of data. As for getting the filter and sort to happen anytime a change is made, use the Worksheet_Change event. Be sure to put this code in a Sheet Module, not a standard module. To get into a Sheet Module, double-click the desired sheet name on the left-hand side of the Visual Basic Editor and that will open that sheet's code module.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rData As Range
Dim rDest As Range
'Adjust these as necessary
Set rData = Me.Range("S1", Me.Cells(Me.Rows.Count, "S").End(xlUp))
Set rDest = Me.Range("T1")
'Disable events to prevent infinite loops
Application.enableevents = False
'Clear previous results
rDest.EntireColumn.ClearContents
'Make sure a change was made in column S
If Not Intersect(rData, Target) Is Nothing Then
'Change in column S found, make sure that there is more than 1 cell populated in column S
If rData.Cells.Count > 1 Then
'Extract unique values
rData.AdvancedFilter xlFilterCopy, , rDest, True
'Sort unique values high to low
With Me.Range(rDest, Me.Cells(Me.Rows.Count, rDest.Column).End(xlUp))
.Sort .Cells, xlDescending, Header:=xlYes
End With
End If
End If
'Re-enable events
Application.enableevents = True
End Sub