Eliminar duplicados en Excel VBA
A continuación vamos a ver un programa en Excel VBA que quita los duplicados.
Situación:
En la columna A tenemos 10 números. Queremos eliminar los duplicados de estos números y colocar los números únicos en la columna B.
-
En primer lugar, declarar cuatro variables. toadd de tipo booleano, uniqueNumbers de tipo entero, i de tipo entero, y j de tipo entero.
Dim toAdd As Boolean, uniqueNumbers As Integer, i As Integer, j As Integer
-
A continuación, se escribe el primer número de la columna A hasta la columna B, ya que el primer número es siempre ‘único’.
Cells(1, 2).Value = Cells(1, 1).Value
-
inicializar dos variables. Acabamos de agregar un número a la columna B, por lo inicializamos uniqueNumbers con el valor 1. Hemos establecido toadd a True el supuesto de que los próximos necesidades numéricas para añadir también (esto no es necesariamente cierto, por supuesto).
uniqueNumbers = 1 toAdd = True
Tenemos que determinar si el segundo número es ‘único’ o no. Esto se puede hacer de una manera muy fácil. Sólo si el número no está ya en la columna B, el segundo número necesita ser añadido a la columna B.
-
También es necesario comprobar esto por el tercer número, cuarto número, y así sucesivamente. Empezamos un bucle For Next para esto.
For i = 2 To 10
-
Ahora viene la parte más importante del programa. Si el segundo número es igual a uno de los números en la columna B (hasta ahora sólo tenemos un número único), nos propusimos toadd en Falso porque en este caso no queremos añadir este número! (No es ‘único’). En los uniqueNumbers momento sigue siendo igual a 1, pero uniqueNumbers pueden ser una lista completa. Para comprobar toda esta lista, necesitamos otro bucle For Next. Una vez más: si el número que queremos añadir es igual a uno de los números en esta lista, toadd se establece en False y no se añadirá el número. Añadir las siguientes líneas de código:
For j = 1 To uniqueNumbers If Cells(i, 1).Value = Cells(j, 2).Value Then toAdd = False End If Next j
-
Sólo si toadd sigue siendo cierto y no se establece en False, Excel VBA tiene que añadir el número a la columna B. Al mismo tiempo, se incrementará en un 1 uniqueNumbers porque tenemos un número único más ahora. Las siguientes líneas de código hacer el trabajo:
If toAdd = True Then Cells(uniqueNumbers + 1, 2).Value = Cells(i, 1).Value uniqueNumbers = uniqueNumbers + 1 End If
-
Por último, se establece en True toadd suponiendo que el número siguiente (tercer número) necesita ser agregado. De nuevo, esto no es necesariamente cierto.
toAdd = True
-
No se olvide de cerrar el bucle.
Next i
-
Coloque la macro en un botón de comando y probarlo.
Resultado: