Crear nuevas pestañas por meses desde un filtro en Excel y copiar su contenido en cada pestaña

Como puedo extraer de un archivo de Excel de su columna Meses, los meses repetidos y crear una pestaña por mes, es mucha informacion por lo que quisiera que lo que corresponde al mes de Enero en un filtro lo corte y pegue en la pestaña con el mes que le corresponde.

Gracias por su apoyo

Alfonso Pineda

1 Respuesta

Respuesta
2

Te anexo la macro para crear las pestañas y copiar la información correspondiente de cada mes en cada pestaña.

Suponiendo que tienes los meses en la columna "A" de la "Hoja1" y que además en esa columna tienes fechas.

Si no tienes fechas entonces deberás decirme que tienes para adaptar la macro.

Cambia en la macro "Hoja1" por el nombre de la hoja en donde tienes tu información.

Sub copiar_a_mes()
'Por.Dante Amor
    Set h1 = Sheets("Hoja1")
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    '
    Set rango = h1.UsedRange
    meses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", _
                  "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
    For i = 1 To 12
        '
        nh = meses(i)
        For Each h In Sheets
            If h.Name = nh Then existe = True: Exit For
        Next
        '
        If existe Then
            Set h2 = Sheets(nh)
        Else
            Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
            h2.Name = nh
        End If
        existe = False
        h2.Cells.Clear
        '
        ud = Day(DateSerial(Year(Date), i + 1, 1) - 1)
        fin = i & "/" & ud & "/" & Year(Date)
        rango.AutoFilter Field:=1, Operator:=xlFilterValues, Criteria2:=Array(1, fin)
        rango.SpecialCells(xlCellTypeVisible).Copy h2.Range("A1")
        '
    Next
    MsgBox "Información copiada a su hoja de mes", vbInformation
End Sub

Saludos.Dante Amor

Si es lo que necesitas, no olvides valorar

Que tal de antemano gracias por su apoyo, ya ejecute la Macro, solo que no comente que en lugar de fechas tiene el nombre del mes y no se si se pueda que solo cree las pestañas de los meses que encuentre, no siempre están todo los meses del año. Lo

Lo que voy a hacer es un proceso muy lago por cada mes, al inal debo de integrar todo en una sola pestaña.

Entonces me tienes que decir exactamente cómo tienes los datos y cómo quieres que aparezcan.

1. Nombre de la hoja con datos.

2. Columna en donde tienes los meses

3. Cómo tienes los meses: (ene, feb,) o (enero, febrero)

4. Cómo quieres que se llame la hoja: (ene, feb) o (enero, febrero) o (1, 2, )

5. En la hoja del mes quieres que se borre la hoja y que se ponga lo nuevo o quieres que permanezca lo que tienes en la hoja del mes y que te acumule en la última fila vacía lo que se está copiando.

Si tienes más detalle que aportar es bienvenido.

Se me paso explicar los detalles, mil disculpas, quedaría así:

1. Los datos completos están en Hoja 1

2. Los nombres de los meses están en la columna A

3. Los meses están con el nombre completo: Enero, Fbrero, Marzo.....etc.

4. La hoja se llamará con los nombres del punto 3

5. Los datos deberran de la hoja 1 deberan de ser borrados despues de haberse pasado a cada mes. En esa misma hoja despues de hacer mis procesos quiero juntar toda la información procesada.

6. Las pestañas de los meses se pueden quedar alli como referencia.

Gracias por tu apoyo.

Alfonso Pineda

Para el punto 5, creo que no pregunté bien.

Tienes varios datos que corresponden a febrero, esos datos van en la hoja febrero, ¿correcto?

En la hoja febrero, si es que ya existe, ¿tiene datos? ¿Esos datos los borro?

Ahora este es un nuevo punto: "Los datos deberran de la hoja 1 deberan de ser borrados despues de haberse pasado a cada mes". ¿Esto significa que la "hoja1" quedará vacía?

Aplica la siguiente macro

Sub copiar_a_mes()
'Por.Dante Amor
    Application.ScreenUpdating = False
    Set h1 = Sheets("Hoja1")
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    u = Range("A" & Rows.Count).End(xlUp).Row
    '
    Set rango = h1.UsedRange
    meses = Array("", "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", _
                  "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
    For i = 1 To 12
        '
        mes = meses(i)
        rango.AutoFilter Field:=1, Criteria1:=mes
        '
        u = h1.Range("A" & Rows.Count).End(xlUp).Row
        If u > 1 Then
            nh = meses(i)
            For Each h In Sheets
                If h.Name = nh Then existe = True: Exit For
            Next
            '
            If existe Then
                Set h2 = Sheets(nh)
            Else
                Set h2 = Sheets.Add(after:=Sheets(Sheets.Count))
                h2.Name = nh
            End If
            existe = False
            h2.Cells.Clear
            '
            rango.SpecialCells(xlCellTypeVisible).Copy h2.Range("A1")
        End If
    Next
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    h1.Select
    h1.Cells.ClearContents
    MsgBox "Información copiada a su hoja de mes", vbInformation
End Sub

Si quieres borrar la información de la hoja, deja en la macro esta línea

H1. Cells. ClearContents

Si no quieres que se borre, entonces quita la línea de la macro..

Saludos. Dante Amor

Recuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas