Macro para eliminar y copiar filas en otra hoja

Aquí, haciendo incursiones con las macros pero esto es muy complejo. Agradecería mucho su ayuda.

Tengo 2 hojas de excel en un libro. En la hoja 1 tengo miles de filas y datos repartidos en 10 columnas.

En la hoja 2 cientos de filas y datos repartidos en 4 columnas (a, b, c, d)

Los datos de las columnas de la hoja 2 se encuentran en la hoja 1 con esta relación.

El dato de la columna (B) está en la columna (F) de la hoja 1. El de la columna (B) está en la columna (C). La columna (C) en la columna (J) y el de la columna (D) en (A).

Los valores de la hoja 2 son únicos pero los de la hoja 1 se repiten. Necesito que con los datos de la hoja 2 se eliminen todas las filas que los contengan de la hoja 1 y a la vez que me los copie en una hoja nueva.

Quizás estoy abusando... Pido perdón por explicarme tan mal.

1 Respuesta

Respuesta
2

Esta es la macro, el resultado te lo pone en la hoja3.

Sigue las Instrucciones para un botón y ejecutar la macro
1. Abre tu libro de Excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. En el menú elige Insertar / Módulo
4. En el panel del lado derecho copia la macro
5. Ahora para crear un botón, puedes hacer lo siguiente:
6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona click y arrastra el Mouse para hacer grande la imagen.
8. Una vez que insertaste la imagen en tu hoja, dale click derecho dentro de la imagen y selecciona Asignar macro / Selecciona: eliminar_y_copiar_filas
9. Aceptar.
10. Para ejecutarla dale click a la imagen.

Sub eliminar_y_copiar_filas()
'Por.DAM
Set h1 = Sheets("Hoja1")
Set h2 = Sheets("Hoja2")
Set h3 = Sheets("Hoja3")
h3.Cells.Clear
k = 1
For i = 1 To h2.Range("A" & Rows.Count).End(xlUp).Row
    For j = h1.Range("F" & Rows.Count).End(xlUp).Row To 1 Step -1
        If h2.Cells(i, "A") = h1.Cells(j, "F") And _
           h2.Cells(i, "B") = h1.Cells(j, "C") And _
           h2.Cells(i, "C") = h1.Cells(j, "J") And _
           h2.Cells(i, "D") = h1.Cells(j, "A") Then
            h1.Rows(j).Copy h3.Rows(k)
            h1.Rows(j).Delete Shift:=xlUp
            k = k + 1
        End If
    Next
Next
End Sub

Este proceso puede ser tardado, prueba primero con pocos registros, si es lo que quieres, prueba con todos.

Saludos. Dante Amor
Si es lo que necesitas.

Muchas gracias. Ha hecho exactamente lo que necesito pero, como bien has apuntado, tarda demasiado, tarda tanto que no resulta factible. Tiene que haber otra forma.

Finalizo la pregunta mientras busco otras alternativas. La pregunta que he realizado ha sido contestada de forma excelente. La macro funciona a la perfección.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas