VBA – Eliminar Duplicados de un Array/Matriz
Este tutorial le enseñará cómo eliminar duplicados de un Array en VBA.
Eliminar Duplicados
La forma más fácil de eliminar duplicados de un Array en VBA es asignar los valores del Array a una Colección en VBA y luego pasar los valores de vuelta a un Array. Las Colecciones no permiten valores duplicados y por lo tanto utilizando una Colección, podemos eliminar duplicados de un arreglo. Hemos creado una función para realizar esta tarea:
Function RemoverDuplicadosEnArray(MyArray As Variant) As Variant
Dim nFirst As Long, nLast As Long, i As Long
Dim item As String
Dim arrTemp() As String
Dim Coll As New Collection
'Obtener la primera y la última posición del Array
nFirst = LBound(MyArray)
nLast = UBound(MyArray)
ReDim arrTemp(nFirst To nLast)
'Convertir array en cadena
For i = nFirst To nLast
arrTemp(i) = CStr(MyArray(i))
Next i
'Rellenar la colección temporal
On Error Resume Next
For i = nFirst To nLast
Coll.Add arrTemp(i), arrTemp(i)
Next i
Err.Clear
On Error GoTo 0
'Redimensionar array
nLast = Coll.Count + nFirst - 1
ReDim arrTemp(nFirst To nLast)
'Rellenar Array
For i = nFirst To nLast
arrTemp(i) = Coll(i - nFirst + 1)
Next i
'Array resultante
RemoverDuplicadosEnArray = arrTemp
End Function
Sub ArrayTest()
Dim strNames(1 To 4) As String
Dim outputArray() As String
Dim i As Long
Dim item As Variant
'Establecer los valores iniciales de la matriz
strNames(1) = "Shelly"
strNames(2) = "Steve"
strNames(3) = "Neema"
strNames(4) = "Steve"
'Llamar función Dup
outputArray = RemoverDuplicadosEnArray(strNames)
'Salida de valores a Ventana Inmediata (CTRL + G)
For Each item In outputArray
Debug.Print item
Next item
End Sub
Nota: En el ejemplo hemos forzado nuestro Array para que empiece en 1 (no en 0). Si tu array empieza en 0 tendrás que modificar el código ligeramente.
Observe que convertimos el contenido del array en una cadena. Si es necesario, puede volver a convertir las cadenas a enteros una vez finalizado el proceso.