1. AyudaExcel utiliza cookies. Si continuas utilizando AyudaExcel, estás aceptando la utilización de nuestras cookies. Más información.
  2. ¡Bienvenid@ a AyudaExcel! El foro más visitado sobre Excel en habla hispana.

    Si esta es tu primera visita, asegúrate de revisar los temas de la sección Utilización y Funcionamiento para familiarizarte con las funciones del foro. Si deseas publicar mensajes, será necesario que te Registres para que puedas dejar respuestas y crear tus propios mensajes, recuerda que es gratuito.

Solucionado Autofiltro y eliminar las filas filtradas

Tema publicado en 'Macros y programación VBA' iniciado por pedroj, 17 Nov 2009.

Estado del tema:
Cerrado para nuevas respuestas
  1. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Buenos días:

    Quería preguntar si hay alguna macro que elimine todas las filas que han sido filtradas a traves de autofiltro , y luego deshacer el filtrado.

    Un saludo,
    Editado por moderación: 25 Abr 2010
  2. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    92
    Género:
    Masculino
    Hola Pedro,

    ¿en dónde tienes los datos? ¿cómo es la estructura de tu archivo?

    en todo caso, no debería haber ningún problema para hacer lo que quieres... suponiendo que tus datos están en la hoja1 y empiezan en A1 y lo quieres filtrar y copiar a la hoja 2, algo así debería funcionar:

    CÓDIGO:
    Sub Prueba()
    
        With Sheets("hoja1").Range("A1")
        
            .AutoFilter Field:=1, Criteria1:="[COLOR="Red"]CRITERIO[/COLOR]"
        
            .SpecialCells(xlCellTypeVisible).Copy Sheets("Hoja2").Range("A1")
        
            .AutoFilter
            
        End With
        
    End Sub
    el CRITERIO pues es el criterio por el que desees filtrar los datos.

    espero que te sea de ayuda. Si aún no consigues lo que quieres lo mejor para ahorrarnos tiempo todos es que subas un archivo con un ejemplo de tus datos.
  3. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Hola Mauricio,

    Gracias por tu ayuda. No quiero que los datos filtrados sean copiados en otra hoja, quiero eliminarlos del archivo. Luego quiero deshacer filtro , para volver a utilizar autofiltro y con otros criterios volver a elimiar información del archivo.

    Hago lo siguiente:

    CÓDIGO:
    Cells.Select
        Selection.AutoFilter
        Selection.AutoFilter Field:=7, Criteria1:="Warning log (W)"
        Selection.AutoFilter Field:=2, Criteria1:="<>81*", Operator:=xlAnd
        ActiveSheet.Cells.SpecialCells(xlCellTypeVisible).Delete
    Pero tambien me borra la fila 1 (fila de títulos) que no quiero que la elimine, Cómo haría esto ?
    Un saludo,
  4. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    92
    Género:
    Masculino
    suponiendo que tus datos empiezan en A1, prueba este código:

    CÓDIGO:
    Sub prueba()
    
        Application.DisplayAlerts = False
            
        With Range("A1")
            
            .AutoFilter 7, "Warning log (W)"
            .AutoFilter 2, "<>81*", xlAnd
            Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
                Columns.Count).End(xlToLeft)).SpecialCells(12).Delete
            .AutoFilter
            
        End With
    
        Application.DisplayAlerts = True
        
    End Sub
  5. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Hola Mauricio, es código funciona perfectamente. Perdona por mis escasos conocimientos en Visual Basic, pero podrías explicarme cómo haces la selección del rango filtrado a eliminar ??? . O alguna pagina o archivo donde empezar poco a poco ??

    Muchas gracias,

    Un saludo.
  6. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    92
    Género:
    Masculino
    claro que sí.

    este es el código que hace el filtrado:

    With Range("A1")

    Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, Columns.Count).End(xlToLeft)).SpecialCells(12).Delete

    End With

    el rango se va a generar dentro de range(cells...)

    ahora, cells toma como referencia la fila y la columna para dar un celda, así cells(1,1) es la celda A1.

    cells(rows.count, .column) es la celda de la última fila (rows.count) con la columna de la celda A1, esto es, la columna 1 (.column quiere decir range("A1").column por lo que está dentro del with y la columna de range("A1") es 1).

    así, hasta acá el rango que estamos generando viene siendo cells(ultimafila, 1), al añadirle el .end(xlup) pues nos llevará hasta la primera celda ocupada de abajo a arriba de la columna 1. Así ya hemos seleccionado la primera celda ocupada de la columna A de abajo hacia arriba.

    para completar el rango, necesitamos la otra referencia, que correspondería a la celda de la última fila ocupada abajo de A1 (para que cuando borre los datos no borre los encabezados). Esto se hace con Cells(.Row + 1, Columns.Count).End(xlToLeft), que selecciona la fila + 1 del range("A1") (.row + 1 = range("A1").row + 1 = 2). Acá ya tenemos la celda(fila = 2, columna = columns.count). Columns.count da el número de columnas de la hoja así que nos llevará a la última columna de la fila 2. Con end(xltoleft) iremos a la primera columna ocupada de la fila 2 y está. Tenemos el rango que necesitamos.

    Bueno, explicar por acá resulta un poco complicado, espero que te haya ayudado a aclarar.

    cualquier cosa no más dices.
  7. luka79

    luka79 Usuario

    Registrado:
    18 Oct 2009
    Mensajes:
    91
    Me Gusta recibidos:
    0
    Hola Mauricio.. Cada día aprendo algo mas de tí, pero me surge una pregunta, cuando haces el autofiltro en A1, ¿no depende de que no haya ninguna fila vacía en el rango? es que yo hago muchos autofiltros de ficheros de texto importados y tengo que eliminar muchas filas vacías y si no selecciono todo el rango , no me sale.

    Gracias nuevamente, aunque sin botón de agradecer
  8. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    92
    Género:
    Masculino
    gracias por tus palabras luka79 y me alegra saludarte. Creo que todos estamos acá aprendiendo montones los unos de los otros. Con respecto a lo que dices, no sé si te esté entendiendo bien, pero si tus datos son todos contiguos, es decir, sin filas no columnas en blanco, con que escojas una celda cualquiera de los datos y apliques el filtro quedará. En este caso yo estoy suponiendo que todos los tados son contiguos y empiezan en A1, así al aplicar el autofiltro a A1 se aplicará automáticamente a todos los datos. Si quieres aplicar el autofiltro a una parte específica de los datos, tendras que seleccionar los datos a los que quieres aplicar el autofiltro y así quedará sólo para los datos seleccionados. Si los datos no son contiguos, con filas o columnas en blanco, tendras que seleccionar todos los datos para que se aplique el autofiltro a toda la selección.

    Si los datos son todos contiguos Excel los asume como un conjunto de datos y no hará falta seleccionarlos todos para aplicar el autofiltro, excel entenderá que te refieres a todos los datos cuando aplicas el autofiltro a uno de ellos. El problema es cuando tienes filas o columnas en blanco o cuando quieres seleccionar sólo una parte de los datos, en esos casos tendrás que "explicarle" a excel, seleccionando el rango, a qué datos quieres aplicarle el autofiltro.

    Espero te ayude a aclarar un poco.

    Un tip, jajaja, que yo soy fanático de los atajos del teclado que ahorran mucho tiempo. De pronto ya lo conoces, de pronto no y de pronto le interesa a alguien más, si presionas Ctrl+Mayús+L activarás o desactivarás el autofiltro, con las condiciones indicadas anteriormente.
  9. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Hola de nuevo a todos,

    Quería darte nuevamente las gracias Mauricio por tu explicación ( muy buena ) para novatos como yo. Coincido con las palabras de Luka79, y espero poder seguir aprendiendo poco a poco algo.

    Gracias,
    Un saludo
  10. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Buenos dias ,

    Estoy probando el código y se para en la ultima línea de AutoFilter ( me indica que se requiere un objeto... )

    CÓDIGO:
    Application.DisplayAlerts = False
    
       With Range("A1")
    
          .AutoFilter 7, "Warning log (W)"
          .AutoFilter 2, "<>621*", xlAnd
          Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
             Columns.Count).End(xlToLeft)).SpecialCells(12).Delete
          .AutoFilter
          
          .AutoFilter 7, "Miscellaneous"
          
          Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
             Columns.Count).End(xlToLeft)).SpecialCells(12).Delete
          .AutoFilter
          
          .AutoFilter 2, "0"
          
          Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
             Columns.Count).End(xlToLeft)).SpecialCells(12).Delete
          .AutoFilter
          
          End With
    
    Application.DisplayAlerts = True

    No entiendo.... , porque con otro archivo similar sí que funciona...

    un saludo,
    Gracias
  11. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Hola de nuevo.

    Creo que la interrupcion es debido a que no hay valores "0" en el campo del Autofiltro que intento eliminar. (Field=2)

    Como puedo condicionar el codigo para que dependiendo de si hay valores "0" a filtrar y eliminarlos ???

    Gracias por adelantado,
    Un saludo
  12. mjrofra

    mjrofra Moderador Staff AyudaExcel

    Registrado:
    28 May 2009
    Mensajes:
    2.686
    Me Gusta recibidos:
    92
    Género:
    Masculino
    Hola Pedroj, podrías probar con On Error Resume Next para evitar que la macro se detenga cuando haya un error porque no existan datos para filtrar según el criterio que indicas. Ten cuidado si vas a usar esto pues la macro continuará ante cualquier otro error que se presente.

    Prueba así a ver si se soluciona el problema o mientras pensamos en otra alternativa (esto es según lo que dices, no he probado la macro):

    CÓDIGO:
    Application.DisplayAlerts = False
    
    on error resume next
    With Range("A1")
    
    .AutoFilter 7, "Warning log (W)"
    .AutoFilter 2, "<>621*", xlAnd
    Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
    Columns.Count).End(xlToLeft)).SpecialCells(12).Del ete
    .AutoFilter
    
    .AutoFilter 7, "Miscellaneous"
    
    Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
    Columns.Count).End(xlToLeft)).SpecialCells(12).Del ete
    .AutoFilter
    
    .AutoFilter 2, "0"
    
    Range(Cells(Rows.Count, .Column).End(xlUp), Cells(.Row + 1, _
    Columns.Count).End(xlToLeft)).SpecialCells(12).Del ete
    .AutoFilter
    
    End With
    
    Application.DisplayAlerts = True
  13. pedroj

    pedroj Nuevo Usuario

    Registrado:
    16 Dic 2008
    Mensajes:
    18
    Me Gusta recibidos:
    0
    Buenas a todos,


    Muchas gracias Mauricio. Como siempre , no hago mas que aprender cosas nuevas...
Estado del tema:
Cerrado para nuevas respuestas

Compartir esta página