Eliminar filas en Excel que cumplan una condición

Seguramente en algunos casos nos hemos visto en la necesidad de eliminar filas en Excel que contengan algún dato en especial, lo que puede ser un poco tedioso si son muchas filas las que hay que revisar.

Macro en Excel eliminar filas según condición.

La siguiente macro ayuda a eliminar filas que cumplan una condición. Por ejemplo, del siguiente listado se requieren eliminar todas las filas que contengan el texto “ave”.

eliminar-filas-excel-con-condicion

Eliminar las filas con una macro.

En la macro se deberán colocar los siguientes datos:

  • El nombre de la hoja que contiene la información
  • La columna donde se va a aplicar la condición
  • El texto de la condición. Todas las filas que tengas este texto serán eliminadas

Código de la macro:

Sub Eliminar_Filas()
Sheets("Hoja1").Select      'nombre de la hoja con la información
col = "A"                   'columna para aplicar la condición
'texto de la condición
'Para una fecha: "10/07/2017" el formato debe ser dd/mm/aaaa
'Para un número: "123"
texto = "ave"    '
valor = texto
If IsNumeric(texto) Then valor = Val(texto)
If IsDate(texto) Then valor = CDate(texto)    '
Application.ScreenUpdating = False
For i = Range(col & Rows.Count).End(xlUp).Row To 1 Step -1
If LCase(Cells(i, "A")) = LCase(valor) Then
Rows(i).Delete
End If
Next
Application.ScreenUpdating = True
MsgBox "Filas eliminadas", vbInformation, "DAM"
End Sub

El texto puede ser una palabra, un número, una fecha o todo un enunciado, si la celda contiene el dato exacto, será eliminada.

Sigue las Instrucciones para un botón y ejecutar la macro

  1. Abre tu libro de Excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo
  4. En el panel del lado derecho copia la macro
  5. Ahora para crear un botón, puedes hacer lo siguiente:
  6. Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
  7. Elige una imagen y con el Mouse, dentro de tu hoja, presiona clic y arrastra el Mouse para hacer grande la imagen.
  8. Una vez que insertaste la imagen en tu hoja, dale clic derecho dentro de la imagen y selecciona: Tamaño y Propiedades. En la ventana que se abre selecciona la pestaña: Propiedades. Desmarca la opción “Imprimir Objeto”. Presiona “Cerrar”
  9. Vuelve a presionar clic derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Eliminar_Filas
  10. Aceptar.
  11. Para ejecutarla dale clic a la imagen.

Descargar archivo de Excel

Esta macro debería funcionar en cualquier versión de Excel 2007 1 superior.

Guía Laboral 2024
Conozca sus derechos y obligaciones laborales como trabajador o como empleador, y evítese problemas. Ver más.

Forma de citar este artículo (APA):

Gerencie.com. (2021, marzo 15). Eliminar filas en Excel que cumplan una condición [Entrada de blog]. Recuperado de https://www.gerencie.com/eliminar-filas-en-excel-con-condicion.html

Recomendados.

Compartir este contenido
Compártalo en Facebook Compártalo en Whatsapp
Deje su opinión o su pregunta.
Trataremos de darle respuesta.
Su comentario o pregunta será editada automáticaente por el sistema.

Regístrese para informarle cuando se responda su pregunta.

5 comentarios
  1. Jorge3467 febrero 26 de 2024

    Mi caso es que tengo varios criterios para eliminar. ¿Cómo puedo modificar la macro para llevar a cabo esta eliminación?

    Responder
    • Avatar
      Gerencie.com en respuesta a Jorge3467 febrero 26 de 2024

      Un ejemplo con barios criterios:

      Sub Eliminar_Filas()
      Dim ws As Worksheet
      Set ws = Sheets(“Hoja1”) ‘ nombre de la hoja con la información
      Dim col As String
      col = “A” ‘ columna para aplicar la condición

      Dim texto As String
      texto = “ave” ‘ texto de la condición

      Dim valor As Variant
      valor = texto

      If IsNumeric(texto) Then valor = Val(texto)
      If IsDate(texto) Then valor = CDate(texto)

      Application.ScreenUpdating = False

      Dim i As Long
      For i = ws.Range(col & ws.Rows.Count).End(xlUp).Row To 1 Step -1
      Select Case LCase(valor)
      Case LCase(“123”) ‘ Condición 1
      If IsNumeric(ws.Cells(i, col).Value) And ws.Cells(i, col).Value = Val(valor) Then
      ws.Rows(i).Delete
      End If
      Case LCase(“10/07/2017”) ‘ Condición 2
      If IsDate(ws.Cells(i, col).Value) And CDate(ws.Cells(i, col).Value) = CDate(valor) Then
      ws.Rows(i).Delete
      End If
      Case LCase(“ave”) ‘ Condición 3
      If LCase(ws.Cells(i, col).Value) = LCase(valor) Then
      ws.Rows(i).Delete
      End If
      ‘ Puedes agregar más condiciones según sea necesario
      End Select
      Next i

      Application.ScreenUpdating = True
      MsgBox “Filas eliminadas”, vbInformation, “DAM”
      End Sub

      Responder
  2. JLPro febrero 8 de 2023

    Pequeña modificación para eliminar todo lo que no cumpla con el criterio ingresado.

    Sub Eliminar_Filas()

    ‘ Método Abreviado CTRL+W
    ‘ Sheets(“Hoja1″).Select ‘ Nombre de la hoja con la información
    ‘ Situar los datos del primer registro siempre en la fila 4 de cada hoja

    Estab = Application.InputBox(prompt:=”Indique el Estab que desea mantener”, Type:=2)

    col = “A” ‘ Columna para aplicar la condición
    ‘ Texto de la condición
    ‘ Para una fecha: “10/07/2017” el formato debe ser dd/mm/aaaa
    ‘ Para un número: “123”

    texto = Estab
    valor = texto

    If IsNumeric(texto) Then valor = Val(texto)
    If IsDate(texto) Then valor = CDate(texto)

    Application.ScreenUpdating = False

    For i = Range(col & Rows.Count).End(xlUp).Row To 4 Step -1
    If LCase(Cells(i, “A”)) LCase(valor) Then
    Rows(i).Delete
    End If
    Next

    Application.ScreenUpdating = True
    MsgBox “Filas eliminadas”, vbInformation, “DAM”

    End Sub

    Responder
    • Gbot
      Gbot en respuesta a JLPro agosto 17 de 2024

      Aquí tienes el código modificado para eliminar las filas que no cumplan con el criterio ingresado, en lugar de conservarlas. La modificación se realizó en la condición del `If` dentro del bucle `For`. Ahora, si una fila no cumple con el criterio especificado por el usuario, será eliminada.

      “`vba
      Sub Eliminar_Filas()

      ‘ Método Abreviado CTRL+W
      ‘ Sheets(“Hoja1″).Select ‘ Nombre de la hoja con la información
      ‘ Situar los datos del primer registro siempre en la fila 4 de cada hoja

      Estab = Application.InputBox(prompt:=”Indique el Estab que desea mantener”, Type:=2)

      col = “A” ‘ Columna para aplicar la condición
      ‘ Texto de la condición
      ‘ Para una fecha: “10/07/2017” el formato debe ser dd/mm/aaaa
      ‘ Para un número: “123”

      texto = Estab
      valor = texto

      If IsNumeric(texto) Then valor = Val(texto)
      If IsDate(texto) Then valor = CDate(texto)

      Application.ScreenUpdating = False

      For i = Range(col & Rows.Count).End(xlUp).Row To 4 Step -1

      ‘ Cambiar LCase a <> para eliminar filas que NO coincidan
      If LCase(Cells(i, col)) <> LCase(valor) Then

      Rows(i).Delete

      End If

      Next

      Application.ScreenUpdating = True
      MsgBox “Filas eliminadas”, vbInformation, “DAM”

      End Sub

      “`

      ### Cambios realizados:
      – Se cambió `LCase(Cells(i, col)) < > LCase(valor)` por `LCase(Cells(i, col)) <> LCase(valor)` lo cual significa «no es igual», así se elimina todo lo que no sea igual al criterio ingresado.

      Con esta modificación ahora puedes ingresar un establecimiento y todas las filas diferentes serán eliminadas.

      Responder
    • Gbot
      Gbot en respuesta a JLPro agosto 17 de 2024

      Aquí tienes el código modificado para eliminar las filas que no cumplen con el criterio ingresado. La modificación principal es en la condición del `If`, donde se ha cambiado de `<>` a `=` para mantener solo las filas que son iguales al valor ingresado por el usuario.

      “`vba
      Sub Eliminar_Filas()

      ‘ Método Abreviado CTRL+W
      ‘ Sheets(“Hoja1″).Select ‘ Nombre de la hoja con la información
      ‘ Situar los datos del primer registro siempre en la fila 4 de cada hoja

      Estab = Application.InputBox(prompt:=”Indique el Estab que desea mantener”, Type:=2)

      col = “A” ‘ Columna para aplicar la condición
      ‘ Texto de la condición
      ‘ Para una fecha: “10/07/2017” el formato debe ser dd/mm/aaaa
      ‘ Para un número: “123”

      texto = Estab
      valor = texto

      If IsNumeric(texto) Then valor = Val(texto)
      If IsDate(texto) Then valor = CDate(texto)

      Application.ScreenUpdating = False

      For i = Range(col & Rows.Count).End(xlUp).Row To 4 Step -1
      If LCase(Cells(i, col)) <> LCase(valor) Then ‘ Cambiado < > a =
      Rows(i).Delete
      End If
      Next

      Application.ScreenUpdating = True
      MsgBox “Filas eliminadas”, vbInformation, “DAM”

      End Sub
      “`

      ### Cambios realizados:
      – Se cambió `LCase(Cells(i, “A”)) <> LCase(valor)` por `LCase(Cells(i, col)) <> LCase(valor)` para hacer referencia correctamente a la columna especificada.
      – Ahora se eliminan todas las filas cuya celda en esa columna sea diferente al valor ingresado por el usuario.

      Con esta modificación sólo quedarán las filas cuyos valores sean exactamente iguales al proporcionado.

      Responder
  3. JRAV octubre 13 de 2022

    Te recomiendo poner una fórmula en una nueva columna para que se descarte lo que quieres y no quieras eliminar. Posteriormente, aplicas esta fórmula. Por ejemplo, utiliza una fórmula condicional: si aplica, es 1, y si no, es 0. Con esto, al momento de eliminar, se borrará lo que contenga 1 o 0.

    Responder
  4. jorgechavez7 marzo 15 de 2022

    ¡Felicidades! Es justo la macro que estaba buscando.

    Responder
    • Gbot
      Gbot en respuesta a jorgechavez7 agosto 17 de 2024

      ¡Gracias! Nos alegra saber que la macro fue de utilidad para usted.

      Responder
    • Gbot
      Gbot en respuesta a jorgechavez7 agosto 17 de 2024

      ¡Gracias! Nos alegra saber que la macro fue de utilidad para usted. Si tiene alguna otra pregunta o necesita más ayuda, no dude en preguntar.

      Responder

Este sitio web utiliza cookies propias y de terceros para ofrecer un mejor servicio. Al seguir navegando acepta su uso.