Macro para eliminar filas idénticas.

Escribo mi segunda pregunta en esta página y esta vez con el siguiente problema a resolver: Tengo en una hoja de excel una tabla que resume unas cierta cantidad de tareas a realizar por el personal de una empresa, para poder ver qué tareas se cumplen a tiempo, quien la cumplió, etc. Para explicarme mejor, en la columna A tengo el nombre de la tarea a realizar(son bastantes) en y en la columna C tengo la fecha en que fue asignada dicha tarea. El problema está en que en algunas tareas Y su fecha asignada se repite. Para ser un poco más claro, la tarea se puede repetir en otra fila (porque una misma tarea puede tener varias fechas asignadas) y las fechas de la columna C también pueden repetirse (porque puede ser que en una fecha se asignaron varias tareas), lo que yo no quiero es que una tarea se repita con la misma fecha. Si en las filas se repite la columna A y C, las filas son idénticas, y quiero borrarlas a través de una macro. Por eso pido una macro que elimine las filas que son completamente iguales o bien las filas en la que se repita la columna A y C (la que sea más conveniente). Espero haber sido claro con la petición y obtener una respuesta...

1 Respuesta

Respuesta
1

Sin macros lo puedes seleccionado los datos y hacer a través del menu datos, luego seleccionar duplicados y las columnas de ls que quieres eliminar filas repetidas

Por macros es lo mismo solo ocupas esta instrucción

Sub seleccion()

Range("a1").CurrentRegion.RemoveDuplicates Columns:=Array(1, 3)
End Sub

Antes que nada muchisimas gracias por responder. Te comento, tu procedimiento es muy bueno y valido pero para mi caso no me estaría sirviendo, ya que la tabla mencioné (tabla 2) se alimenta de otra tabla (tabla 1)  a traves de una macro que copia datos según una condicion desdeTabla 1 a la primera fila en blanco de Tabla 2. Cada vez que aplico la forma que me escribiste, los datos se copian pero dejando una fila en blanco, y no me sirve... En fin, todo el sistema me funciona casi perfecto con la macro que dejo aca abajo (sacada de internet) y me funcionaría totalmente bien si en vez de comparar los datos de la columna "A", me comparara los datos de "A" y "C" a la vez. Alguna sugerencia para que eso pase? Gracias de antemano.

Sub repetidos()
'Opcional
'Application.ScreenUpdating = False
Range("A2").Select
Do While Not IsEmpty(ActiveCell)
    x = WorksheetFunction.CountIf(Range("A:A"), ActiveCell)
    If x > 1 Then
        ActiveCell.EntireRow.Delete
    Else
        ActiveCell.Offset(1, 0).Select
    End If
Loop
Range("A1").Select
'Opcional
'Application.ScreenUpdating = True
End Sub

Mejor sube una imagen de los datos que quieres borrar, pueden ser inventados para darme una idea de que es lo que quieres

De esa tabla inventada tendría que eliminarse la fila 5, ya que A5 y C5 son idénticas a A3 y C3 (por ende, como explique en la pregunta original, toda la fila es idéntica)

Entonces prueba con esta macro, elimina todas las filas que estén duplicadas

Sub eliminar_repetidos()
Set datos = Range("a1").CurrentRegion
With datos
    .Sort _
    key1:=Range(.Columns(1).Address), order1:=xlAscending, _
    key2:=Range(.Columns(3).Address), order2:=xlAscending, Header:=xlYes
    f = .Rows.Count: c = .Columns.Count
    Set datos = .Rows(2).Resize(f - 1, c)
    Formula = "=a2&" & """ """ & "&c2"
    .Columns(c + 1).Formula = Formula
    Set tabla = .Columns(c + 4).Resize(f, 1)
    .Columns(c + 1).Copy
    With tabla
        .PasteSpecial xlValues
        .RemoveDuplicates Columns:=1
        matriz = .CurrentRegion
        .Clear
        For i = 1 To UBound(matriz)
            texto = matriz(i, 1)
            cuenta = WorksheetFunction.CountIf(datos.Columns(c + 1), texto)
            If cuenta > 1 Then
                fila = WorksheetFunction.Match(texto, datos.Columns(c + 1), 0)
                datos.Cells(fila, c + 1).Resize(cuenta, 1) = "borrar"
            End If
        Next i
    End With
    Set datos = .CurrentRegion
    .Sort key1:=Range(.Columns(c + 1).Address), order1:=xlDescending, Header:=xlYes
    cuenta = WorksheetFunction.CountIf(datos.Columns(c + 1), "borrar")
    If cuenta > 0 Then
         fila = WorksheetFunction.Match("borrar", datos.Columns(c + 1), 0)
         .Rows(fila).Resize(cuenta, c + 1).Clear
    End If
    .Columns(c + 1).Clear
End With
st datos=nothing: set tabla=nothing
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas