jueves, 7 de agosto de 2008

Eliminar Filas con Macro

Para eliminar filas alternas, bien sean las pares o bien las impares, se puede utilizar esta macro.

Sub EliminaFilas() 'Elimina filas alternas (pares o impares) For i = 5 To 3000     Cells(i, "A").EntireRow.Delete Next i End Sub
El contador i va de uno en uno ya que al eliminar una fila la que se encontraba en la siguiente posición alterna, ahora es ha convertido en contígua. Cells(fila, columna). En este caso ponemos la columna A, en lugar de con el número 1, que es lo habitual, lo hacemos con la expresión "A". Comenzamos en i=5, esto hace que se eliminen las filas impares que comienzan en la fila 5. Si hubiéramos puesto i=6 entonces se comenzaría en la fila 6 y se eliminarían las filas pares. Si quieres hacer una prueba puedes obtener las cotizaciones de algún valor del Ibex desde la página de Invertia. Verás que al pasarlo a Excel te quedan filas en blanco interpuestas entre las filas que contienen las cotizaciones. Puedes probar la macro para eliminar las filas en blanco. Para ello elige un valor de Ibex y en 'Cotizaciones históricas' podras ver una tabla con los datos de las cotizaciones. Esta tabla la puedes seleccionar con el ratón, copiay y pegar en Excel. Otro inconveniente es que vienen muchos objetos incrustados que puedes eliminar con F5 (ir a), Especial, Objetos y luego pulsa la tecla Suprimir, de esta forma eliminaras todos estos molestos objetos.

28 comentarios:

  1. Hola, quise realizar una prueba y al ejecutarla me indica un error de compilación: No se ha definido Sub o Function, qué hago?

    ResponderEliminar
  2. Hola Antonio.

    Una macro comienza por 'Sub' y finaliza con 'End Sub', encontrándose entre ambas sentencias las líneas de programa.

    Comprueba que la macro cumple esos requisitos. Si olvidamos poner alguna de esos comandos, o ponemos alguno de más, surge el error que comentas.

    Un saludo.

    Adolfo Aparicio

    ResponderEliminar
  3. Hola Adolfo, muchas gracias, por error borre el end, ya quedo perfecta.

    Gracias desde Ciudad de México.

    ResponderEliminar
  4. Buenas... Quisiera hacerte una pregunta relacionada. Estoy tratando de borrar filas de texto que se encuentran entre medio de parrafos bien delimitados. El archivo puede abrirse sin problema en cualquier programa office, es solo texto. En realidad es un subtitulo en el cual quiero borrar la fila que se encuentra en inglés ya que logré borrar la que está en castellano usando el buscar y reemplazar de word con comodines, pero no logro dar con el grupo de comodines para eliminar la fila en ingles. La razón es que quiero obtener dos subtitulos independientes sin tener que hacer el borrado a mano.
    El archivo tiene el siguiente formato en cada parrafo de igual manera:

    1
    00:01:02,700 --> 00:01:06,978
    Christmas comes but once a year
    (La Navidad llega una vez al año)

    2
    00:01:07,060 --> 00:01:11,338
    For every girl and boy
    (para cada niño y niña.)

    3
    00:01:11,380 --> 00:01:15,658
    The laughter and the joy
    (La risa y la alegría)

    Son 592 parrafos de ahi mi renuencia a hacerlo a mano.

    Gracias de antemano, saludos

    ResponderEliminar
  5. Hola.
    Si quieres eliminar filas que se encuentran de forma periódica en un texto largo, puedes probar esta macro:

    Sub EliminaFilas()
    'Elimina filas una de cada cuatro 'comenzando en la fila 5
    For i = 5 To 3000
    Cells(i+3,"A").EntireRow.Delete
    Next i
    End Sub

    Comienza eliminando la fila 5 ya que hemos escrito 'i=5'

    Elimina una fila cada cuatro filas, ya que hemos puesto 'i+3'.

    Pruebalo modifica estas dos variables para que se ajuste a tus necesidades.

    Un saludo.

    Adolfo Aparicio

    ResponderEliminar
  6. Muchas gracias, funcionó perfectamente.
    Saludos

    ResponderEliminar
  7. Estimado:

    Te escribo para solicitarte ayuda con lo sgte.

    tengo un archivo como este a continuación

    2.4 m 2.7 m 3.0 m 3.3 m 3.6 m 3.9 m Totals
    APE 38_120 0 0 0 0 0 3 3
    0 0 0 0 0 0.06 0.06
    APE 38_135 0 0 0 0 1 66 67
    0 0 0 0 0.02 1.35 1.36
    APP 38_120 0 0 0 0 1 5 6
    0 0 0 0 0.02 0.09 0.11
    APP 38_135 0 0 0 0 0 6 6
    0 0 0 0 0 0.12 0.12
    COR 44 0 0 0 0 0 1 1
    0 0 0 0 0 0.03 0.03
    M&B 38_165 0 0 0 0 1 3 4
    0 0 0 0 0.02 0.07 0.1
    M&B 38_185 0 0 0 0 0 5 5
    0 0 0 0 0 0.14 0.14
    M&B 38_192 0 0 0 0 0 2 2
    0 0 0 0 0 0.06 0.06
    M&B 38_212 0 0 0 0 0 2 2
    0 0 0 0 0 0.06 0.06
    M&B 38_225 0 0 0 0 0 1 1
    0 0 0 0 0 0.03 0.03
    M&B 38_305 0 0 0 0 0 1 1
    0 0 0 0 0 0.05 0.05
    M&B 44_152 0 0 0 0 0 2 2
    0 0 0 0 0 0.05 0.05

    es una tabla con una primera fila que comienza en C1 con encabezados de largo (2,4 mts; 3,00 mts;etc.-), en la sgte fila (A2) están los datos que deseo mantener, y en la fila sgte 3;5;7;9;etc.- están los datos que no me sirven.

    Al probar tu código...lamentablemente manda un mensaje de depuración que me lleva al editor de visual pero ha agregado más líneas al original.

    No sé cómo hacerlo y es bastante el volúmen de archivos que debo manejar de la misma manera, y entenderás que a mano es engorroso lento y cansador.

    Espero me puedas ayudar con esto, uso el office 2007 por si sirve el dato.

    Me puedes contactar en robertolatorre@gmail.com.
    Desde ya muchas gracias.

    ResponderEliminar
  8. Antonio, buenas tardes ten go un problema corrí la macro pero me sale un mensaje que dice, Se ha producido el error 28 en tiempo de ejecución.
    Espacio de pila insifuciente.
    Gracias de antemano, saludos desde Brasil

    ResponderEliminar
  9. Hola Marco Aurelio.

    El error que comentas se da habitualmente cuando se ejecuta un bucle y se produce algún problema de recursividad, por ejemplo, cuando no se consigue terminar el bucle. Otro motivo puede ser que se está ejecutando el bucle con muchos ciclos en un PC con poca memoria RAM.

    Prueba a ejecutar la macro con el FOR NEXT de 5 hasta 500, por ejemplo, y si puedes, ejecútalo en otro PC con mayor RAM.

    Puedes mirar este Post, para tomar ideas de macros que eliminan filas y columnas:

    Eliminar Filas y Columnas vacias

    ResponderEliminar
  10. Hola, tengo los siguientes subtítulos que quiero editar. Pongo un pequeño extracto:

    1
    00:00:55,055 --> 00:00:56,056
    [somber opera music]

    2
    00:00:56,056 --> 00:00:57,057
    [somber opera music]

    3
    00:00:56,056 --> 00:01:04,064
    ♪ ♪

    4
    00:01:19,579 --> 00:01:21,080
    >> BEFORE THE GAME,

    5
    00:01:21,081 --> 00:01:22,582
    >> BEFORE THE GAME,

    6
    00:01:21,081 --> 00:01:24,084
    FOR SPORTSMANSHIP, I GO OUT TO

    7
    00:01:24,084 --> 00:01:27,087
    FOR SPORTSMANSHIP, I GO OUT TO

    8
    00:01:24,084 --> 00:01:25,585
    SHAKE JOHN STARKS' HAND,

    9
    00:01:25,585 --> 00:01:27,086
    SHAKE JOHN STARKS' HAND,

    La cuestión es que la mayor parte de las líneas se repite en el tiempo dos veces y quisiera eliminarlas, porque retrasan la salida de la siguiente. Obviamente no me vale el borrado alternativo, porque no todas se repiten y ésto haría que se eliminaran algunas imprescindibles. ¿Hay forma de hacer que se borren el grupo de 3 líneas cuya última linea sea igual a la última del anterior (o siguiente) grupo de 3 líneas?
    Espero que me podáis ayudar, si me habéis entendido...
    Gracias.

    ResponderEliminar
  11. Hola buenas, ¿cómo podría eliminar filas en las que en una de sus celdas hubiese una "x"?

    Muchas gracias de antemano

    Saludos.

    ResponderEliminar
  12. 4as yo tengo el mismo problema queria borrar 2 seguidas y una no, lo resolvi con el siguiente macro

    Sub Macro1()
    ' Macro1 Macro
    For i = 1 To 30
    Cells(i + 1, "A").EntireRow.Delete
    i = i + 1
    Next
    For i = 2 To 30
    Cells(i, "A").EntireRow.Delete
    Next
    End Sub

    Ahi si quieres muevele para ver si te sirve

    ResponderEliminar
  13. Diego, tu macro me sirvio mucho.
    agradecido

    ResponderEliminar
  14. Esto les puede servir.

    Otra manera de eliminar una, dos, tres o más filas y una no, o dos no, etc, es la siguiente.

    Insertar una columna "auxiliar", dentro de esta columna deberán darle un valor x a la o las filas que desean eliminar y dejar vacías las filas que no desean eliminar; si desean eliminar las filas siguiendo un parámetro, pueden seleccionar (la o las celdas vacías y la o las celdas marcadas) y arrastrar de tal modo que se tenga marcadas todas las filas que se desean eliminar. Ahora deben seleccionar toda la columna "auxiliar" presionar F5, Especial, Constantes, ACEPTAR (Con esto tendrán seleccionadas solo las celdas de las filas que desean eliminar). Click derecho en una de estas celdas seleccionadas, click en eliminar, click en "toda la fila" y ACEPTAR.

    Este método, sin desmerecer las macros que podamos crear, es mucho más sencillo y el proceso de eliminación es inmediato, sin importar la cantidad de filas que queramos eliminar; lo que, dependiendo de la velocidad de sus procesadores, con una macro, puede demorar algunos fastidiosos segundos.

    ResponderEliminar
    Respuestas
    1. Hola Juan Carlos.
      Fantástico!!! Me ha gustado mucho el método.
      Tienes toda la razón al decir que si algo se puede solucionar sin macro y de forma sencilla siempre será mucho mejor que usar macros.
      Lo he probado y esta muy bien. El único inconveniente es que las X las tienes que poner a mano, ya que si lo haces con una fórmula SI dejando como opción en caso verdadero que ponga una X y en caso falso que ponga "". Al pulsar luego F5 y elegir Constantes lo que hace es señalar todo, ya que el valor "" lo no toma exactamente igual que una celda vacía. Tampoco es un gran inconveniente ya que luego puedes ordenar esa columna auxiliar y eliminar todas las filas que tengan X.
      Buen aporte!!!

      Eliminar
  15. Hola Juan Carlos.
    Si ponemos en la columna auxiliar una fórmula condicional SI que nos ponga las X en las celdas cuya fila deseamos eliminar y nos ponga "" en las celdas restantes, hemos visto que al seleccionar esa columna auxiliar y pulsar F5 si ponemos Constante el truco no funciona puesto que selecciona todas las celdas.

    Lo que tenemos que hacer es poner las X con la función SI y luego copiar y pegar esa columna auxiliar sobre si misma con pegado especial valores. Luego se selecciona la columna auxiliar entera y se pulsa F5. Se elige "Especial..." y "Diferencia entre columnas". Ahora ya tendremos seleccionadas únicamente las celdas que contienen la X. Finalmente pulsamos sobre el botón derecho de ratón y elegimos "Eliminar" y "Toda la fila".
    Gracias por el aporte. Me ha gustado mucho.

    ResponderEliminar
  16. Ando en buscar de dos macros..
    1. Macro para eliminar al ultima fila que contenga valores en una tabla
    2. Macro para eliminar todas las filas que contengan un valor indicado en una celda X, ej: en Hoja1, A1, contiene el valor 55, al ejecutar la macro, esta ubica el valor en la columna C de la Hoja 2 y elimina la fila, si el mismo valor esta en tres filas distintas, se eliminan las 3 filas que lo contengan...

    ResponderEliminar
  17. tengo una duda... si deseo eliminar una fila con la condición de que una cela tenga si, la celda tiene un no la fila no se eliminara... con que condicional puedo comparar la celda sin que tenga una posición precisa sino que cambie según el ciclo for?

    ResponderEliminar
  18. tengo una duda... si deseo eliminar una fila con la condición de que una cela tenga si, la celda tiene un no la fila no se eliminara... con que condicional puedo comparar la celda sin que tenga una posición precisa sino que cambie según el ciclo for?

    ResponderEliminar
  19. Hola Adolfo!

    Tengo una duda y no consigo solventarla. Tengo una tabla en la que cada celda tiene una lista de datos. Alguna celda tiene un dato y otras tienen varios. He hecho una macro para que cuando yo selecciono un nombre de otra lista desplegable, me busque en cada fila de esa tabla el nombre que yo quiero. El problema está que cuando tengo varios datos en una celda, sólo me lee el primero. Si quieres te puedo pasar el archivo para que le eches un vistazo. Estoy empezando en este mundo y me queda aún mucho por aprender! Muchas gracias de antemano!

    ResponderEliminar
  20. buenos dias tengo esta macro que me elimina filas segun el contenido de una celda, hasta ahi bien, pero como mis filas van en pareja quiero que ademas de la fila con una celda que contenga la palabra INSTITUTO, borre tambien la inmediata siguiente, es decir si la macro borra la fila 30,38 y 44 pues que tambien borre las filas 31,.39 y 45, pero no tengo ni idea de como hacerlo;
    dejo la macro que uso aver si alguien me ayuda y muchas gracias.

    Sub Elimina_clase()

    Sheets("Intercambio").Select
    Dim a As New Collection
    Sheets("Intercambio").Select
    For b = 1 To Range("A" & Rows.Count).End(xlUp).Row
    If UCase(Cells(b, "E")) = "INSTITUTO" Then
    a.Add b
    End If
    Next

    For b = a.Count To 1 Step -1
    Rows(a(b)).Delete

    Next

    End Sub

    ResponderEliminar
  21. Hola, interesante la macro pero si puedes ayudarme por favor... tengo texto y numeros en la columna A y quiero eliminar solo las filas que contengan texto, están mezclados entre todos los datos. Hay alguna forma de hacerlo? el texto puede decir cualquier cosa. Muchas gracias

    ResponderEliminar
    Respuestas
    1. hay algun patron que se repita en tus celdas? es decir las mismas letras o palabras? puedes enviar un archivoexcel para verlo?

      Eliminar
  22. Hola Maestro, y como sería la macro para eliminar la fila a partir de la Columna "B" y bajo la condición de que la columna "D" esta vacía

    ResponderEliminar
  23. HOLA PODRÍAS AYUDARME, TENGO UNA BASE DE DATOS EN EL CUAL QUIERO ELIMINAR TODAS LAS FILAS QUE CONTENGAN LA PLABARA ELIMINAR.

    ResponderEliminar
    Respuestas
    1. Hola.
      Supongamos que tienes una tabla en Excel donde la columna A contiene en algunos registros (filas) la palabra "eliminar". Una forma de eliminar las filas donde está esta palabra consiste en ordenar la tabla por la columna A, de esta forma quedarán juntas todas las filas que se quieren eliminar. Luego lo que hacemos es eliminarlas y así ya lo hemos conseguido. Finalmente se vuleve a ordenar si que quiere por el mismo criterio por el que estaba ordenada la tabla inicialmenente.
      El procedimiento descrito es manual, si esto se va ha realizar muchas veces sería necesario programar una macro.
      Un saludo.

      Eliminar
  24. Hola, como puedo eliminar Todos los datos de una hoja en particular.???

    ResponderEliminar