Antes que nada decir que lo que he hecho es una chapuza a modo de ejemplo, ... pero funcional
Para probarla, en una hoja ingresa algunos valores (alguno repetido) en una columna y luego en un nuevo modulo agrega lo siguiente:
Sub Unica()
Dim valores() As String
Dim i As Integer, e As Integer, c As Integer
ReDim valores(0)
valores(0) = ActiveCell.Value
'Almacenamos la primera celda como primer valor del array
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
'Pasamos a la celda siguiente
i = 1
Do While ActiveCell.Value <> ""
'Recorremos todas las celdas de una columna
If repetido(ActiveCell.Value, valores) = False Then
'Si la funcion repetido devuelve falso
ReDim Preserve valores(i)
'Redimensionamos el array
valores(i) = ActiveCell.Value
'Asignamos el valor
i = i + 1
End If
Cells(ActiveCell.Row + 1, ActiveCell.Column).Select
'Pasamos a la siguiente celda
Loop
'Una vez generamos el array lo volcamos en otra pagina
c = 1
For e = LBound(valores) To UBound(valores)
Sheets(2).Cells(c, 1).Value = valores(e)
c = c + 1
Next
End Sub
Function repetido(valor As String, aray() As String) As Boolean
'Recorremos el array comparando uno a uno sus valores
For e = LBound(aray) To UBound(aray)
If valor = aray(e) Then
'Si se encuentra el valor, entonces esta repetido
'se sale del bucle y se asigna true a la funcion
repetido = True
Exit For
Else
repetido = False
'De lo contrario es falso
End If
Next
End Function
Con respecto al ordenamiento ...
Métodos de ordenamiento<---clickDeberías de adaptarlo a tu "problema" y además ...
seguro que se puede mejorar
Saludos