Macro para filtrar casa elemento de una lista y guardar el resultado de ese filtro en csv.

Tengo esta tabla: se puede con una macro ir filtrando estación por estación e ir guardando el resultado de cada filtro en formato csv con el nombre de la estación?

2 respuestas

Respuesta
1

Te anexo la macro.

Cambia en la macro "Hoja 1" por el nombre de tu hoja con datos.

Crea una hoja y le pones por nombre "temp"

Sub Separar_Datos()
'----
'   Por Dante Amor
'----
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    Application.StatusBar = False
    Set l1 = ThisWorkbook
    Set h1 = Sheets("Hoja1")    'hoja con datos
    Set h2 = Sheets("temp")     'hoja temporal
    col = "E"                   'columna clave
    ucol = "F"                  'ultima columna de datos
    n = Columns(col).Column
    h2.Cells.ClearContents
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    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
    '
    ruta = l1.Path & "\"
    u2 = h2.Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To u2
        Application.StatusBar = "Generando archivo " & i - 1 & " de " & u2 - 1
        clave = h2.Cells(i, "A")
        If h1.AutoFilterMode Then h1.AutoFilterMode = False
        u1 = h1.Range(col & Rows.Count).End(xlUp).Row
        h1.Range("A1:" & ucol & u1).AutoFilter Field:=n, Criteria1:=clave
        Set l2 = Workbooks.Add
        Set h21 = l2.Sheets(1)
        h1.Range("A1:" & ucol & u1).Copy h21.[A1]
        l1.SaveAs Filename:=ruta & clave & ".csv", FileFormat:=xlCSV, CreateBackup:=False
        l2.Close False
    Next
    If h1.AutoFilterMode Then h1.AutoFilterMode = False
    Application.StatusBar = False
    MsgBox "Archivos creados"
End Sub

'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 
'.[Avísame cualquier duda

Gracias Dante ya pegue la macro y me genera un archivo así:

y requiero que se guarde así, con todas las fechas que le corresponden a esa estación filtrada

Entiendo lo que necesitas. Eso hace la macro, filtra por cada estación y te genera un archivo por cada estación.

Puedes poner una imagen de la hoja "temp"

Puedes probar la macro con 6 registros, pon 2 registros para cada estación; prueba nuevamente, te debe generar 3 archivos. Cada archivo con 2 registros.

¿Modificaste algo a la macro?

Hola de nuevo Dante: Probé la macro con 3 estaciones y 8 registros por cada estación, me genero 3 archivos, solo que al archivo original(Camp_11_18) lo renombro con el nombre de la segunda estación(BOLONCHEN) y la hoja con el nombre de temp, la re-nombro con el nombre de la tercera estación (CHIHUAHUA), los demás archivos los guardo con sus nombres respectivos, solo que los tres archivos tienen lo mismo, te muestro las imagenes

Archivos creados

El original

el temp que ahora se llama chihuahua lo guardo asi:

y los demás así:

y

Checando como trabaja, no renombra el original 

Perdona, aquí está el error en esta línea

        l1.SaveAs Filename:=ruta & clave & ".csv", FileFormat:=xlCSV, CreateBackup:=False

Debe ser l2, cambia en la macro así

        l2.SaveAs Filename:=ruta & clave & ".csv", FileFormat:=xlCSV, CreateBackup:=False

Prueba nuevamente.

 Tenias Razón Dante, solo era cambiar l1 por l2.

muchas  ¡Gracias!

Una ultima pregunta Dante o la pregunto en otro tema? para que me respete el formato de la fecha dd/mm/yyyy

Abre el archivo con el block de notas, ¿revisa qué tienes?

Me pones un ejemplo de cómo lo tienes en la hoja y qué te está poniendo en el block de notas.

Si te das cuenta yo no cambio nada, solamente pongo la instrucción para guardar como CSV.

Tal vez tengas que cambiar la fecha a un formato de texto, para que de esa forma en el archivo CSV permanezca la misma fecha.

Este es el archivo origen: 

y este es lo que resulta después de la macro:

Los ejemplos no corresponden.

Además veo que pusiste 2 block de notas y te pedí una del excel y otra del block de notas.

Realizaste esta parte:

Tal vez tengas que cambiar la fecha a un formato de texto, para que de esa forma en el archivo CSV permanezca la misma fecha.

el primero es el original

y este es el filtrado 

cuando cambio la fecha a formato de texto del original (por ejemplo 01/1/2011 lo paso a 40544), ejecuto la macro y ya con el archivo resultante cambio de texto a fecha y solo así mantiene el formato

Te pedí una del excel y otra del block de notas

Quiero ver tu hoja de excel original

La macro te genera un CSV, pero no quiero que lo abras con excel, quiero que lo abras con el block de notas y me lo muestres

Un excel (original) y block de notas(resultado de un filtro)


La macro no hace cambios de fechas, tal vez el problema es en tu versión de excel al abrir los archivos CSV. Por eso tienes que hacer algo adicional, como bien comentas:

Cuando cambio la fecha a formato de texto del original (por ejemplo 01/1/2011 lo paso a 40544), ejecuto la macro y ya con el archivo resultante cambio de texto a fecha y solo así mantiene el formato

Original (igual csv) de donde se filtran y se generan csv:

este es uno generado y que solo abri con block de notas

yo creo que igual y guardo como texto la columna "f", para después con una macro cambiar la columna "f" a fecha

Ahora sí ya veo las imágenes, podrías decirme en cuál de esos registros tienes problemas.

Tal vez deberías revisar el formato de la fecha en la hoja.

Antes de ejecutar la macro. Copia algunos registros a una hoja y guarda esa hoja como CSV, después abres el archivo CSV y revisa cómo te aparecen las fechas.

Realmente el problema no es de la macro, si no de excel. Realiza las pruebas y me comentas.

Respuesta
1

Esto te puede aportar algo más

https://www.programarexcel.com/2013/08/macro-de-excel-que-habre-libros-extrae.html 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas