Elimina valores duplicados

Hola a todos nuevamente. Tengo el siguiente código que encontré por ahí, cuya función es la de buscar y eliminar valores repetidos en un rango determinado. Quisiera si fuaran tan amables, me pasaran la corrección que habría que hacer para lograr 2 variantes:
1. Que en lugar de eliminar solo la celda con el valor repetido elimine toda la fila o un rango de la fila.
2. Que en lugar de eliminar la celda la marque con un color X
El código es el siguiente:
Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A1:A100").Rows.Count
Sheets("hoja1").Range("A1").Select
Do Until ActiveCell = ""
For iCtr = 1 To iListCount
If ActiveCell.Row <> Sheets("hoja1").Cells(iCtr, 1).Row Then
If ActiveCell.Value = Sheets("hoja1").Cells(iCtr, 1).Value Then
Sheets("hoja1").Cells(iCtr, 1).Delete xlShiftUp
iCtr = iCtr + 1
End If
End If
Next iCtr
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
Desde ya muchas gracias!

1 respuesta

Respuesta
1
La modificación para el color:
Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A1:A100").Rows.Count
Sheets("hoja1").Range("A1").Select
Do Until ActiveCell = ""
For iCtr = 1 To iListCount
If ActiveCell.Row <> Sheets("hoja1").Cells(iCtr, 1).Row Then
If ActiveCell.Value = Sheets("hoja1").Cells(iCtr, 1).Value Then
Sheets("hoja1").Cells(iCtr, 1).Interior.ColorIndex = 6
Sheets("hoja1").Cells(iCtr, 1).Interior.Pattern = xlSolid
iCtr = iCtr + 1
End If
End If
Next iCtr
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
Modificacion para eliminar filas.
Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer, aux As String
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A1:A100").Rows.Count
Sheets("hoja1").Range("A1").Select
Do Until ActiveCell = ""
For iCtr = 1 To iListCount
If ActiveCell.Row <> Sheets("hoja1").Cells(iCtr, 1).Row Then
If ActiveCell.Value = Sheets("hoja1").Cells(iCtr, 1).Value Then
aux = iCtr & ":" & iCtr
Rows(aux).Select
Selection.Delete Shift:=xlUp
iCtr = iCtr + 1
End If
End If
Next iCtr
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
Muchas gracias. Funcionan tal lo pedí, sin embargo en la opción que marca con color, al ser una macro que se repite, los valores que están duplicados los marca todos ( en el caso que los elimine ya no los encuentra ). ¿Será posible que si detecta que la celda esta coloreada ya no busque ese dato?. De cualquier manera ya me ha sido de gran utilidad.
Saludos a todos
Haber si entiendo lo que necesitas:
             A B C
1 50
2 60
3 50
4 80
5 50
6 70
La Macro busca el valor de A1 = 50, lo encuentra en A3 y en A5
si lo que necesitas es que cuendo encuentre el A3 no siga buscando A1
Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A1:A100").Rows.Count
Sheets("hoja1").Range("A1").Select
Do Until ActiveCell = ""
For iCtr = 1 To iListCount
If ActiveCell.Row <> Sheets("hoja1").Cells(iCtr, 1).Row Then
If ActiveCell.Value = Sheets("hoja1").Cells(iCtr, 1).Value Then
Sheets("hoja1").Cells(iCtr, 1).Interior.ColorIndex = 6
Sheets("hoja1").Cells(iCtr, 1).Interior.Pattern = xlSolid
iCtr = iCtr + 1
GoTo salir:
End If
End If
Next iCtr
salir:
ActiveCell.Offset(1, 0).Select
Loop
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
No se si hay algo mal en el código o lo que yo necesito es muy complicado, pero es básicamente es lo que tu me planteas en el ejemplo, pero si a ese mismo ejemplo le agrego otro 50 en la fila 7 hay 2 que me quedan sin marcar. En algunas ocasiones pareciera que funciona correctamente y en otras no. Te vuelvo a aclarar cual es mi idea, buscar todos los datos repetidos (todos menos 1 que sería el dato primitivo) en un cierto rango y que me los marque de alguna menera para poder ver si los tengo que, por ejemplo, eliminar.
Nuevamente garcías, siguen siendo de gran ayuda las correcciones que has hecho.
Haber si ahora esta bien:
Sub Color()
Dim iListCount As Integer
Dim iCtr As Integer
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A65536").End(xlUp).Row
Sheets("hoja1").Range("A1").Select
h = 1
Do Until ActiveCell = ""
For x = 1 To iListCount
For iCtr = h To iListCount
If ActiveCell.Row <> Sheets("hoja1").Cells(iCtr, 1).Row Then
If ActiveCell.Value = Sheets("hoja1").Cells(iCtr, 1).Value Then
Sheets("hoja1").Cells(iCtr, 1).Interior.ColorIndex = 6
Sheets("hoja1").Cells(iCtr, 1).Interior.Pattern = xlSolid
iCtr = iCtr + 1
End If
End If
Next iCtr
ActiveCell.Offset(1, 0).Select
h = h + 1
Next x
Loop
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
Sub eliminar()
Dim iListCount As Integer
Dim iCtr As Integer, aux As String
Application.ScreenUpdating = False
iListCount = Sheets("hoja1").Range("A65536").End(xlUp).Row
Sheets("hoja1").Range("A1").Select
For iCtr = 1 To iListCount
If Sheets("hoja1").Cells(iCtr, 1).Interior.ColorIndex = 6 Then
aux = iCtr & ":" & iCtr
Rows(aux).Select
Selection.Delete Shift:=xlUp
iCtr = iCtr - 1
End If
Next iCtr
Application.ScreenUpdating = True
MsgBox "Done Dude!"
End Sub
Con la macro color coloreamos todos los datos repetidos menos el primitivo.
Con la macro eliminar, eliminamos todos aquellas celdas que estén con color.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas