Extraer filas completas de una base de datos que coincidan con el nombre de hoja

Tengo un libro de excel que contiene unas 20 hojas (en algunos casos más), en la primera hoja se encuentra la base de datos sobre la que quiero trabajar. En la columna M tengo una serie de datos de los que después de eliminar duplicados y ordenarlos, se ha sacado una relación con la que posteriormente medianto macro renombro el resto de las hojas. Ahora necesito una macro que en función del nombre de las hojas, busque en la primera hoja, en la misma columna M aquellas filas que contengan ese dato (nombre de la hoja) y copie las filas completas, para que lo entendáis, como si filtráramos en la primera hoja por un valor (que va a corresponder con el nombre de la hoja) y pegara cada fila en la hoja que le corresponda.

Muchísimas gracias de antemano, hasta este momento manualmente filtro en la primero hoja, copio todos los datos y los pego en la hoja correspondiente y así 20 o 30 veces. Imagino que por una macro me ahorrare bastante tiempo.

1 Respuesta

Respuesta
1

H o l a:

Si entendí bien, en la primera hoja tienes los datos.

En la columna M tienes el nombre de hoja. Pueden ser varios nombres.

Quieres copiar todos los registros de la primera hoja a la hoja destino según el valor que tienes en la columna M.

Por ejemplo: En la columna M tienes estos datos:

Valores en la columna M

V1

V2

V3

V1

V2

V3


Quieres que la macro copie los 2 registros de la "v1" en la hoja con el mismo nombre "v1", que copie los 2 registros "v2" en la hoja"v2" y los "v3" en la hoja "v3"


Si lo anterior es correcto, te anexo la macro para que realice todo lo que necesitas.

Solamente tienes que tener una hoja en tu archivo con los datos.

La macro se va a encargar de crear las hojas y de copiar los registros correspondientes.


Sub CopiarFilas()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = Sheets(1)
    '
    Call BorrarHojas
    '
    Set h2 = Sheets.Add(after:=Sheets(1))
    h1.Columns("M:M").Copy h2.[A1]
    u = h2.Range("A" & Rows.Count).End(xlUp).Row
    h2.Range("A1:A" & u).RemoveDuplicates Columns:=1, Header:=xlYes
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    For i = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
        Set h3 = Sheets.Add(after:=Sheets(Sheets.Count))
        h3.Name = h2.Cells(i, "A")
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        u1 = h1.Range("M" & Rows.Count).End(xlUp).Row
        h1.Range("A1:M" & u1).AutoFilter Field:=13, Criteria1:="=" & h2.Cells(i, "A")
        u1 = h1.Range("M" & Rows.Count).End(xlUp).Row
        h1.Rows(1 & ":" & u1).Copy h3.[A1]
    Next
    h2.Delete
    Application.ScreenUpdating = True
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    MsgBox "Filas copiadas"
End Sub
'
Sub BorrarHojas()
'Por.Dante Amor
    For h = Sheets.Count To 2 Step -1
        Sheets(h).Delete
    Next
End Sub

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Hola dante, primero mil gracias por que me estas ayudando muchisimo, estoy probando la macro que me adjuntas pero no funciona, ya que solo inserta una hoja pero no vuelca los datos, he modificado solamente las M por la C y que en la hoja de base de datos es en esa columna donde necesito que me filtre por los diferentes datos que encuentre, creo que si me has entendido, digamos que necesito crear hojas independientes con unicamente los datos que le correspondan, podria mandarte el archivo para que lo veas y puedas saber mejor en que falla l macro. Muchas gracias de antemano.

H o l a:

Envíame tu archivo original con varios ejemplos.

En otro archivo me pones el resultado que esperas.

Mi correo [email protected]

En el asunto del correo escribe tu nombre de usuario “carmen Duran” y el título de esta pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas