Cuando una base de datos tiene muchas filas que deben eliminarse, por ejemplo todas las de un proveedor o las que contienen una palabra, hacerlo una por una toma demasiado tiempo. Excel permite seleccionarlas todas de una vez con «Buscar» o con un filtro y eliminarlas en un solo paso, y una macro puede hacerlo automáticamente. ¿Cuál método usar y cómo se aplica?
Antes de cualquiera de ellos conviene guardar una copia del archivo, porque una eliminación masiva es difícil de revisar después.
Con «Buscar todo».
Es el método más rápido cuando la condición es que la fila contenga un texto o un valor determinado, como «ACM»:
- Seleccionar la columna donde se buscará el dato, o toda la tabla.
- Abrir «Buscar» con Ctrl + B, escribir el texto y hacer clic en «Buscar todos».
- En la lista de resultados, presionar Ctrl + E para seleccionarlos todos y cerrar la ventana. Las celdas encontradas quedan seleccionadas en la hoja.
- Ir a «Inicio», «Eliminar», «Eliminar filas de hoja».
En «Opciones» se puede marcar «Coincidir con el contenido de toda la celda» para que solo se encuentren las celdas que dicen exactamente «ACM», y no las que lo contienen como parte de otro texto. El atajo para seleccionar todos los resultados es Ctrl + E en Excel en español, y Ctrl + A en inglés.
- Liquidador de renta personas naturales
- Proyección y planeación pensional
- Liquidador de intereses propiedad horizontal
Con un filtro.
El filtro permite condiciones más complejas, como valores menores que un número, fechas de un periodo o varios textos a la vez, y deja ver las filas antes de eliminarlas:
- Seleccionar la tabla y activar el filtro con «Datos», «Filtro» (Ctrl + Mayús + L).
- En la flecha de la columna, elegir los valores o un «Filtro de texto», «Filtro de número» o «Filtro de fecha» con la condición.
- Seleccionar las filas visibles, sin el encabezado, desde los números de fila.
- Hacer clic derecho y elegir «Eliminar fila». Excel elimina solo las filas visibles.
- Quitar el filtro para ver las filas que quedaron.
Si la condición es la contraria, conservar ciertas filas y eliminar las demás, se filtra por los valores que no se quieren conservar. Otra opción es ordenar la tabla por la columna de la condición, para que las filas a eliminar queden juntas y se seleccionen como un solo bloque.
Contar antes de eliminar.
Para saber cuántas filas se van a eliminar, se cuentan con CONTAR.SI. Con los productos en C5:C16:
=CONTAR.SI(C5:C16;"ave")
=CONTAR.SI(C5:C16;"*ave*")
La primera cuenta las celdas que dicen exactamente «ave», sin distinguir mayúsculas; la segunda, las que contienen «ave» en cualquier parte, lo que incluye «Avena» y «Ave de corral». La diferencia muestra por qué hay que revisar bien la condición antes de eliminar.
Con una macro.
Cuando la eliminación se repite con frecuencia, una macro la hace con un clic. Esta elimina las filas cuya celda de la columna C sea igual a alguno de los criterios de la lista, sin distinguir mayúsculas:
Sub EliminarFilasIguales()
Dim ws As Worksheet, i As Long, u As Long, c As Variant
Dim criterios As Variant
criterios = Array("ave", "arroz")
Set ws = ThisWorkbook.Worksheets("Datos")
u = ws.Cells(ws.Rows.Count, "C").End(xlUp).Row
Application.ScreenUpdating = False
For i = u To 5 Step -1
For Each c In criterios
If LCase(Trim(ws.Cells(i, "C").Text)) = LCase(c) Then
ws.Rows(i).Delete
Exit For
End If
Next c
Next i
Application.ScreenUpdating = True
End Sub
Los datos que se adaptan son el nombre de la hoja, la columna, la primera fila de datos (5 en el ejemplo, porque el encabezado está en la 4) y los criterios, que pueden ser uno o varios. El recorrido se hace de abajo hacia arriba porque, al eliminar una fila, las de abajo suben; si se recorriera hacia abajo, la fila siguiente quedaría sin revisar.
Variantes de la macro.
Con pequeños cambios en la condición del If, la macro resuelve otros casos:
- Filas que contienen el texto: If InStr(1, ws.Cells(i, "C").Text, texto, vbTextCompare) > 0 Then.
- Conservar un valor y eliminar los demás: If LCase(ws.Cells(i, "C").Text) <> LCase(valor) Then.
- Valores menores que un número: If ws.Cells(i, "E").Value < 100000 Then.
- Filas vacías: If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then.
El módulo descargable incluye las cinco macros completas. Una vez importado, se puede asignar cada macro a un botón, como se explica en el artículo sobre cómo crear un botón en Excel. Las filas eliminadas con una macro no se recuperan con Ctrl + Z.
Eliminar filas duplicadas.
Si lo que se busca es eliminar las filas repetidas y dejar una de cada una, no hace falta ninguno de estos métodos: se usa «Datos», «Quitar duplicados», como se explica en el artículo sobre cómo encontrar, contar, quitar y evitar valores repetidos.
Descargar el ejemplo y las macros.
El libro de Excel tiene una base de doce compras para practicar los tres métodos, con los conteos de CONTAR.SI. El archivo de texto contiene cinco macros: eliminar filas iguales a uno o varios criterios, que contienen un texto, distintas de un valor, menores que un límite y vacías. Descargar archivo.
Preguntas frecuentes.
A continuación respondemos las preguntas frecuentes de nuestros lectores.
¿Cómo elimino todas las filas que contienen una palabra?
Con Ctrl + B, «Buscar todos», Ctrl + E para seleccionar los resultados y «Eliminar filas de hoja».
¿Cómo elimino las filas que cumplen una condición numérica?
Filtrando la columna con un «Filtro de número» y eliminando las filas visibles.
¿Por qué la macro debe recorrer las filas de abajo hacia arriba?
Porque al eliminar una fila las siguientes suben, y recorriendo hacia abajo se saltaría una fila en cada eliminación.
¿Cómo elimino las filas con varios criterios?
Con un filtro que marque varios valores, o con la macro que recibe una lista de criterios en Array.
¿Se pueden recuperar las filas eliminadas con una macro?
No con Ctrl + Z. Por eso conviene trabajar sobre una copia.
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