Saltar al contenido

Eliminar Duplicados (a partir de Excel 2007)


Potter08

Recommended Posts

publicado

Esta macro elimina duplicados de la columna que selecciones en el inputbox espero les sirva a mi me funciona bien en excel 2007. no se si se podra optimizar aun mas, pero igual queda a libre modificación.

Sub RemoverDuplicados()
Set rng = Application.InputBox("Selecione celda...", Type:=8)
Range(ActiveCell, ActiveCell.End(xlDown)).Select
Selection.RemoveDuplicates Columns:=1, Header:= _
xlYes
End Sub
[/CODE]

Salu2.xlsx

publicado

Carlos

Gracias por aportar al foro, pero debo mencionar que "RemoveDuplicates" esta disponible a partir de 2007, para que los que tienen aun 2003 no topen con esa sorpresa

Tambien te sugiero que adjuntes siempre un archivo de ejemplo, para realizar pruebas

Saludos

publicado

Carlos

Mencionarte que la variable "rng" no es utilizada para eliminar los duplicados, la macro siempre actuaria donde se encuenta la celda activa, es decir si tienes los datos en la columna A y la celda activa es G1 al correr la macro, aunque selecciones la celda A1, la macro se efectuara en la columna G desde la celda G1, por lo que si me lo permites hago la correccion (espero no te moleste), abajo

Sub RemoverDuplicadosgp()
Set celdactiva = _
Application.InputBox("Selecione celda...", Type:=8)
Range(celdactiva, celdactiva.End(xlDown)).RemoveDuplicates _
Columns:=1, Header:=xlYes
Set celdactiva = Nothing
End Sub[/PHP]

Adjunto el archivo, para pruebas

Saludos

Remover duplicados a partir de Excel 2007 gp.zip

publicado

excelente explicación gracias Gerson tomare encuenta tus comentarios para un proximo aporte, salu2.xlsx

publicado

Hola nuevamente, la verdad no quise abrir un post nuevo por este nuevo aporte asi que aqui les dejo otra posible solución a los duplicados en una columna, se que alguien lo puede hacer mas facil pero para mi corto conocimiento lo dejo a disposición de quien lo quiera mejorar o modificar, pero por favor compartan sus mejoras.

he tratado de hacer la macro abierta a cualquier columna; solo que se me viene a la mente que seria genial una que verificara si las columas secarnas a ella estan vacias o no y si se pudiera elegir si quieres eliminar toda la fila, o a la izquieda, derecha y hacia arriba. Bueno les dejo de tarea a algun guro de macros para que facilite esa aplicación si se me ocurre como lo subo.

Gerson ahora si adjunto archivo.

Macro para eliminar duplicados desde excel 2003 y superior creo.

Salu2.xlsx

Remover Duplicados Excel 2003.xls

publicado

Carlos

Esta puede ser una de las mas efectivas

Sub eliminar_repetidos()

Application.ScreenUpdating = False
With [A:A]
.AdvancedFilter 2, , [B1], 1
.Delete
End With
[A1].Activate
Application.ScreenUpdating = True
End Sub [/PHP]

Adaptada a tu macro

[PHP]Sub eliminar_repetidos2()
Set celda = Application.InputBox("Selecione la columna...", Type:=8)
Application.ScreenUpdating = False
With celda
.AdvancedFilter 2, , celda.Offset(, 1), 1
.Delete
End With
Application.ScreenUpdating = True
End Sub[/PHP]

Por el foro se ha tocado el tema, varias veces, uno de ellos por aqui:

[DBOX]https://www.ayudaexcel.com/foro/macros-programacion-vba-10/solucionado-macros-para-eliminar-valores-repetidos-18865/[/DBOX]

Sigue el tema hasta el final

Dime que te parece?

Saludos

publicado

Si Gerson, me parece muy bien pero que pasa cuando tienes muchas lineas de trabajo y tienes que seleccionar x columna no necesariamente la columna indicada en la macro, se tiene que modificar directamente en el codigo y eso es lo que no me gusta.

he visto muchos codigo por internet y en el foro pero ninguno se adapta a la columna activa o rango seleccionado que es lo que yo prentendia con esta macro. es mi necedad de encontrar una mejor solucion a esto.

Espero me comprendas

Salu2.xlsx

publicado
Adaptada a tu macro

Sub eliminar_repetidos2()
Set celda = Application.InputBox("Selecione la columna...", Type:=8)
Application.ScreenUpdating = False
With celda
.AdvancedFilter 2, , celda.Offset(, 1), 1
.Delete
End With
Application.ScreenUpdating = True
End Sub[/PHP]

[/b]

[/color][i][color=#808080]Por el foro se ha tocado el tema, varias veces, uno de ellos por aqui:

[/color][DBOX][color=#808080]https://www.ayudaexcel.com/foro/macros-programacion-vba-10/solucionado-macros-para-eliminar-valores-repetidos-18865/[/color][/DBOX][color=#808080]

Sigue el tema hasta el final

Dime que te parece?

Saludos[/color][/i]

[color=#0000cd][b][color=#000000][color=#0000BB]Sub eliminar_repetidos2[/color][color=#007700]()

[/color][color=#0000BB]Set celda [/color][color=#007700]= [/color][color=#0000BB]Application[/color][color=#007700].[/color][color=#0000BB]InputBox[/color][color=#007700]([/color][color=#DD0000]"Selecione la columna..."[/color][color=#007700], [/color][color=#0000BB]Type[/color][color=#007700]:=[/color][color=#0000BB]8[/color][color=#007700])

[/color][color=#0000BB]Application[/color][color=#007700].[/color][color=#0000BB]ScreenUpdating [/color][color=#007700]= [/color][color=#0000BB]False

With celda

[/color][color=#007700].[/color][color=#0000BB]AdvancedFilter 2[/color][color=#007700], , [/color][color=#0000BB]celda[/color][color=#007700].[/color][color=#0000BB]Offset[/color][color=#007700](, [/color][color=#0000BB]1[/color][color=#007700]), [/color][color=#0000BB]1

[/color][color=#007700].[/color][color=#0000BB]Delete

End With

Application[/color][color=#007700].[/color][color=#0000BB]ScreenUpdating [/color][color=#007700]= [/color][color=#0000BB]True

End Sub

[/color][/color][/b][/color]

Carlos

Creo que no probaste lo que te marco de color azul arriba

Saludos

publicado

Hola Gerson si lo probe y me parece muy buena la macro pero es usando filtro avanzados, pero en fin este tema tiene un sin fin de soluciones y buscando en la web encontre esta qeu hace lo mismo solo que tiene una de codigo que quedaria excelente si se pudiera simplificar

aqui el codigo:

Public Sub DeleteDuplicateRows()
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' DeleteDuplicateRows http://www.cpearson.com/excel/deleting.htm
' This will delete duplicate records, based on the Active Column. That is,
' if the same value is found more than once in the Active Column, all but
' the first (lowest row number) will be deleted.
'
' To run the macro, select the entire column you wish to scan for
' duplicates, and run this procedure.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Dim R As Long
Dim N As Long
Dim V As Variant
Dim Rng As Range

On Error GoTo EndMacro
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Set Rng = Application.Intersect(ActiveSheet.UsedRange, _
ActiveSheet.Columns(ActiveCell.Column))

Application.StatusBar = "Processing Row: " & Format(Rng.Row, "#,##0")
N = 0
For R = Rng.Rows.Count To 2 Step -1
If R Mod 500 = 0 Then
Application.StatusBar = "Processing Row: " & Format(R, "#,##0")
End If
V = Rng.Cells(R, 1).Value
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Note that COUNTIF works oddly with a Variant that is equal to vbNullString.
' Rather than pass in the variant, you need to pass in vbNullString explicitly.
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
If V = vbNullString Then
If Application.WorksheetFunction.CountIf(Rng.Columns(1), vbNullString) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
Else
If Application.WorksheetFunction.CountIf(Rng.Columns(1), V) > 1 Then
Rng.Rows(R).EntireRow.Delete
N = N + 1
End If
End If
Next R
EndMacro:
Application.StatusBar = False
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Duplicate Rows Deleted: " & CStr(N)
End Sub[/PHP]

Salu2.xlsx

publicado

Carlos

Prefiero el filtro-avanzado (por la velocidad de su proceso) que un bucle, pues al final siempre elimanamos el fila completa, aunque en el enlace que te proporcione, esta un gran aporte de Cacho, el cual (si mal no recuerdo) no hace uso de otra columna mas, donde se encuentran los datos a depurar, en resumen este proceso ya no pasa por el resultado mostrado/conseguido, si no mas bien por el gusto de cada quien para adquirir lo que desea!

Gracias por todos esos codigos

Saludos

publicado
Carlos

Prefiero el filtro-avanzado (por la velocidad de su proceso) que un bucle, pues al final siempre elimanamos el fila completa

Estoy totalmente de acuerdo en esta observación! nada como el filtro avanzado! aun que empieza a tener su limitantes al trabajar con demasiados registros, pero para la gran mayoría de los casos es muy efectivo!

publicado
Estoy totalmente de acuerdo en esta observación! nada como el filtro avanzado! aun que empieza a tener su limitantes al trabajar con demasiados registros, pero para la gran mayoría de los casos es muy efectivo!

De hecho cualquier proceso (en Excel) que involucre una exagerada (demasiada) cantidad de datos, observaremos una lentitud antes de ver el resultado

Para el caso de RemoveDuplicates supongo que Excel (2007/2010) a mejorado su velocidad de procesamiento (aun no lo pruebo exhaustivamente) pero el aparecimiento de nuevas versiones indica mejora en todo sentido no?... y bueno por aqui nuestro compañero mjrofra nos presento una buena discusion junto al compañero Cacho, te invito que la leas

[DBOX]https://www.ayudaexcel.com/foro/macros-programacion-vba-10/solucionado-compatibilidad-2003-2007-a-20702/[/DBOX]

Saludos

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.