Eliminar filas en una hoja de trabajo de Excel si se encuentra duplicado en otra hoja de trabajo


0

Tengo dos hojas de trabajo: "compilado" y "primer pickup". Lo que estoy buscando hacer es eliminar filas en la hoja "firstpickup" si el valor en la columna A también se puede encontrar en la columna A de "compilado". "compilado" es 42,000 filas y "firstpickup" es 21,000, por lo que me gustaría poder ejecutar la macro y hacer que termine después de revisar todos los datos.

Aquí hay algunas opciones que probé en base a búsquedas rápidas de Google:

 Sub RemoveDuplicates()
    Dim rCrit As Range 'Range To Search For Duplicates
    Dim rFilt As Range 'Range To Remove Duplicates
    Dim lLoop As Long

    Set rCrit = Worksheets("compiled").Range("A1", Worksheets("compiled").Range("A" & Rows.Count).End(xlUp))
    Set rFilt = Worksheets("firstpickup").Range("A1", Worksheets("firstpickup").Range("A" & Rows.Count).End(xlUp))

    For lLoop = rCrit.Rows.Count To 2 Step -1
        If WorksheetFunction.CountIf(rCrit, rFilt(lLoop).Value) > 0 Then
            Worksheets("firstpickup").Rows(lLoop).Delete shift:=xlUp
        End If
    Next lLoop
End Sub

Este sub no encontró coincidencias en la función "if", por lo que nunca eliminó ninguna fila, incluso para las filas que sabía que tenían duplicados.

Sub Removeduplicates()

Dim Row As Long
Dim FoundDup As Range

Sheets("compiled").Select

For Row = Range("A24031").End(xlUp).Row To 2 Step -1

Set FoundDup = Sheets("compiled").Range("A:A").Find(Cells(Row, 1), LookIn:=xlValues, lookat:=xlWhole)

If Not FoundDup Is Nothing Then
    Cells(Row, 1).EntireRow.Delete
End If

Next Row

End Sub

Este submarino tampoco tuvo éxito; después de la consulta "For", el depurador saltaría a "end sub".

Cualquier ayuda, ya sea reelaborando mis intentos anteriores o ayudándome con una solución diferente, sería muy apreciada.


1
Para su segunda parte, ¿está seguro de que Range("A24031").End(xlUp).Rowdevuelve un valor mayor que 2? ¿Quizás poner explícitamente la hoja de trabajo antes de eso Worksheets("compiled").Range(...)...?
BruceWayne

Respuestas:


0

Puede usar este código VBA, lo ayudará a eliminar filas de la hoja Firstpickup, si los valores de la columna A coinciden con los valores de la columna A de Complied Sheet.

Sub DeleRows()
Dim LR As Long, i As Long
With Sheets("Firstpickup")
LR = .Range("A" & Rows.Count).End(xlUp).Row
For i = LR To 1 Step -1
    If IsNumeric(Application.Match(.Range("A" & i).Value, Sheets("Complied").Columns("A"), 0)) Then .Rows(i).Delete
Next i
End With
End Sub
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.