Eliminar filas duplicadas en una matriz 2D en VBA
Encontré en stackoverflow algún código que traté de adaptar a mis necesidades, pero con el clásico error 9. Este error (Subíndice fuera del intervalo) apareció después del segundo bucle en la línea “Dim Preserve” con dupArrIndex = 2. No entiendo realmente por qué.
El código hasta ahora:
Function RemoveDuplicate(ByRef poArr As Variant) As Variant
Dim poArrNoDup() As Variant
Dim dupArrIndex As Integer
Dim i As Integer
Dim j As Integer
Dim dupBool As Boolean
dupArrIndex = 0 '-1
For i = LBound(poArr) To UBound(poArr)
dupBool = False
For j = LBound(poArr) To i
If poArr(i, 1) = poArr(j, 1) And Not i = j Then
dupBool = True
Exit For
End If
Next j
If dupBool = False Then
dupArrIndex = dupArrIndex + 1
ReDim Preserve poArrNoDup(1 To dupArrIndex, 1 To 5)
poArrNoDup(dupArrIndex, 1) = poArr(i, 1)
poArrNoDup(dupArrIndex, 2) = poArr(i, 2)
poArrNoDup(dupArrIndex, 3) = poArr(i, 3)
poArrNoDup(dupArrIndex, 4) = poArr(i, 4)
poArrNoDup(dupArrIndex, 5) = poArr(i, 5)
End If
Next i
RemoveDuplicate = poArrNoDup
End Function
Lo que quiero lograr es obtener:
arr(1,1) = aaa
arr(1,2) = asdee
arr(1,3) = qwere
arr(2,1) = bbb
arr(2,2) = ghy
arr(2,3) = rfghdf
En otras palabras, eliminar las filas idénticas en una matriz 2D (dimensiones (x,5)).
Gracias – JLuc01
davy.ai
Parece que el error está relacionado con el hecho de que la variable
dupArrIndex
se establece inicialmente en 0, pero debería establecerse en -1 para poder agregar correctamente el primer elemento al arreglopoArrNoDup
. Además, el bucle interno debería comenzar enj = LBound(poArr) + 1
para evitar comparar el mismo elemento consigo mismo.Aquí tienes el código corregido:
Nota: podría ser más eficiente utilizar un objeto diccionario para almacenar los elementos únicos en lugar de una matriz bidimensional.