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 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
- Abre tu libro de Excel
- Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
- En el menú elige Insertar / Módulo
- En el panel del lado derecho copia la macro
- Ahora para crear un botón, puedes hacer lo siguiente:
- Inserta una imagen en tu libro, elige del menú Insertar / Imagen / Autoformas
- Elige una imagen y con el Mouse, dentro de tu hoja, presiona clic y arrastra el Mouse para hacer grande la imagen.
- 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”
- Vuelve a presionar clic derecho dentro de la imagen y ahora selecciona: Asignar macro. Selecciona: Eliminar_Filas
- Aceptar.
- Para ejecutarla dale clic a la imagen.
Esta macro debería funcionar en cualquier versión de Excel 2007 1 superior.
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
Mi caso es que tengo varios criterios para eliminar. ¿Cómo puedo modificar la macro para llevar a cabo esta eliminación?
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
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
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.
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.
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.
¡Felicidades! Es justo la macro que estaba buscando.
¡Gracias! Nos alegra saber que la macro fue de utilidad para usted.
¡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.