Macro para comparar celdas y eliminar duplicados

En una hoja de excel tengo en la columna A, comenzando desde A2, 2 celdas con un mismo número (por ejemplo 00008). Los números de las celdas de la columna están ordenados en forma ascendente (del 00001 al 05000). Necesito una macro que compare 2 celdas en la columna, y si son iguales, ubicarse en la superior y eliminar toda la fila. Como los números están ordenados, una está encima de la otra, ya que ambas tienen el mismo número.

3 Respuestas

Respuesta
1
Sub Quitar_Repeticiones()
' Esto sirve para ordenar tu columna A, si ya está, puedes omitirlo
Range("A2").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
' Aquí empieza lo que necesitas
While notactivecell.Value = ""
If ActiveCell.Value = ActiveCell.Offset(1, 0).Value Then
Selection.EntireRow.Delete
Else
ActiveCell.Offset(1, 0).Select
End If
Wend
End Sub
Respuesta
1
La macro siguiente hará lo que solicitas, dejando siempre el último valor de una serie de valores repetidos, en tanto estos estén ordenados.
Por lo tanto, activa el editor de Visual Basic (presiona Alt+F11), inserta un nuevo módulo ("Insertar", "Módulo") y pega el siguiente código:
Sub eliLinea()
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Value = Ultval Then
ActiveCell.Offset(-1).EntireRow.Delete
Else
ActiveCell.Offset(1).Select
Ultval = ActiveCell.Value
End If
Loop
End Sub
Cierra el editor de Visual Basic y graba el archivo (esto servirá de backup)
Asumiendo que tu lista de datos es continua -no hay celdas en blanco en tal listado- la macro irá comparando los contenidos de las celdas de la columna que hayas elegido como guía y eliminará toda la fila superior si fuera igual a la celda actual. Cuando encuentre una celda vacía, la macro se detendrá.
Pruébalo y dime si funcionó. Si así fuera, agradeceré un comentario y que la finalices.
(Recuerda que mantener cierto número de respuestas pendientes impide que otros usuarios puedan consultarme)
aclarando qué entendí mal o qué faltó.
Ante todo, muchas gracias por tu respuesta. Probé la macro con los siguientes resultados: en una columna ordenada sin celdas repetidas ni vacías, con los números del 1 al 10, la macro me elimina los impares.
Otra prueba: en una columna ordenada con celdas repetidas y no vacías así:1,2,3,4,5,5,7,8,9,10 al aplicar la macro quedan los números 2,4,5,8,10.
¿Puedes explicármelo?. Gracias
Aquí, el orden de los faroles
altera el alumbrado... ;)
No sé por qué pero involuntariamente, invertí el orden de dos instrucciones.
Esta sería la macro con la secuencia correcta:
Sub eliLinea()
Do While Not IsEmpty(ActiveCell)
If ActiveCell.Value = Ultval Then
ActiveCell.Offset(-1).EntireRow.Delete
Else
Ultval = ActiveCell.Value
ActiveCell.Offset(1).Select
End If
Loop
End Sub
Como verás sólo pospuse el avance de linea luego de la captura del valor de la celda actual.
En las pruebas que efectúe (tus ejemplos incluidos) los resultados fueron satisfactorios.
Disculpa el pequeño desliz.
Un abrazo!
Fernando
Respuesta
1
Supongo que lo que quieres es dejar registros únicos, si es así, esto lo puedes hacer fácilmente y sin macros con el filtro avanzado de Excel que es muy simple de usar, no se como tengas tus datos pero supongamos que tienes datos de la columna A y hasta la DE, si tienes más solo recorreo las columnas
En la primer fila, tendrás los encabezados de tus campos, por ejemplo en la celda A1 tendrías Clave o Numero, después posiciona tu cursor en cualquier área de tus datos, en la celda A2 por ejemplo, ve al menu Datos | Filtro | Filtro Avanzado, por default te seleccionara la región actual llena los demás datos como sigue:
Copiar a otro lugar = ACTIVALA
Rango de la lista = solito te tiene que seleccionar tus datos si no estan bien corrigelos
Rango de criterios = DEJALA EN BLANCO
Copiar A = F1 (Observa como dejo una columna en blanco entre la ultima columna de datos la DE y esta referecnia)
Solo registros unicos = ACTIVALA
Da un click en aceptar y listo, tendrás tus datos sin repetir.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas