' devuelve el número de elementos únicos
Private Function FiltrarUnicos(ByRef n As Integer) As Byte()
Dim k As Integer
Dim ls() As Integer
Dim ElemFil() As Byte
' Hacemos que la lista de devolución tenga el mismo tamaño que la original
ReDim ls(0 To 9999)
ReDim ElemFil(0 To 999)
' vamos recreando en una lista intermedia, la cantidad de apariciones de cada elemento
For k = 0 To 9999
ls(ElemOrig(k)) = ls(ElemOrig(k)) + 1
Next
' si la lista intermedia tiene un valor mayor que 0 ese elemnto existe en la lista original, lo tomamos
For k = 0 To 9999
If ls(k) > 0 Then
ElemFil(n) = k
n = n + 1
End If
Next
Erase ls
' la lista definitiva, tiene espacio no usado lo retiramos
ReDim Preserve ElemFil(0 To n - 1)
' devolvemos la lista filtrada ordenada de menor a mayor.
FiltrarUnicos = ElemFil
Erase ElemFil
End Function