Macro Filtrar copiar y pegar en otro libro excel

Ojalá me puedan ayudar, cada mes tengo que realizar la misma tarea repetitiva. Parto de un excel de unas 5000 lineas, tengo que partir el excel en diferentes libros de excel en función de los valores que aparecen en una columna. Ejemplo: imaginemos la Columna "Codigo" puede contener hasta 30 valores distintos (cod1, cod2... Cod30) tengo que hacer un excel para cada valor (Cod1 tendrá quizá 100 lineas asociadas), actualmente filtro por los que no contengan ese valor, elimino y realizo un guardar como. Seguro que debe haber forma de hacerlo con una macro, ¿me pueden ayudar a construirla?

Soy muy novata en macros, he intentado grabar una realizándolo con el ratón, pero no sé como decirle que continúe y no se quede parada en el mismo valor, tengo que ir filtrando por cada valor...

Espero lo haya explicado lo suficiente bien para que me puedan ayudar.

Cualquier cosa me dicen.

2 Respuestas

Respuesta
2

H   o l a: Te anexo la macro

Cambia en la macro "Hoja10" por el nombre de la hoja que contiene los datos

Cambia "B" por la columna donde tienes los códigos

La macro supone que tienes en la fila 1 los encabezados y en la fila 2 empiezan tus datos.

Al fina, cada archivo generado será guardado en la misma carpeta donde tienes el archivo con la macro y será guardado con el nombre del código.

Sub Crear_Libros()
'---
'   Por.Dante Amor
'---
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Set h1 = Sheets("Hoja10")   'nombre de la hoja con datos
    col = "B"                   'columna de códigos
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Sheets.Add After:=Sheets(Sheets.Count)
    Set h2 = ActiveSheet
    h1.Columns(col).Copy h2.[A1]
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    h2.Range("A1:A" & u2).RemoveDuplicates Columns:=1, Header:=xlYes
    u = h1.Range(col & Rows.Count).End(xlUp).Row
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To u2
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        codigo = h2.Cells(i, "A")
        h1.Range("A1:H" & u).AutoFilter Field:=2, Criteria1:=codigo
        h1.Range("A1:H" & u).Copy
        Set l2 = Workbooks.Add
        ActiveSheet.Paste
        l2.SaveAs ThisWorkbook.Path & "\" & codigo
        l2.Close
    Next
    h2.Delete
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    MsgBox "Fin"
End Sub

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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas