Eliminar filas según contenidos en columna
Contenidos:
Análisis de datos con Excel
Uno de los dos grandes tipos de trabajo que se pueden hacer con solvencia a través de las hojas de cálculo es cálculo; el otro es el análisis de datos. En este caso se nos plantea un problema que se inclina más hacia el análisis, y más concretamente en los estadios preliminares del análisis, como puede ser la limpieza y corrección de datos previos. Me pregunta José Miguel, desde Almería, sobre un caso particular en el que tenemos que eliminar las filas de una tabla en cuyas columnas E y F, por ejemplo, figure un cero.
Si estuviéramos hablando solo de una columna de referencia, y como nuestra intención es eliminar esas filas, sin duda yo optaría por seleccionar la zona de referencia, o sea la columna que contiene esos ceros, pulsar CTRL+B, o en la Cinta de Excel ir a INICIO y luego BUSCAR, poner cero como argumento de búsqueda y encontrar. Así nos quedan seleccionadas las celdas de esa columna que contienen cero. Luego en la misma pestaña de INICIO vamos al grupo de herramientas CELDAS/ELIMINAR/ELIMINAR FILAS DE HOJA. Problema resuelto.
Como queremos examinar dos columnas y ver en qué filas esas dos columnas valen cero, podemos crear una columna auxiliar de control y simplemente comprobar con una fórmula lógica si las dos celdas son cero, =Y(F2=0;G2=0), o más sencillo aún, sumar =F2+G2. Así vuelvo a tener el problema reducido a una columna y estoy en el caso anterior. Problema resuelto.
Pero también sabemos de la flexibilidad y variedad de aproximaciones que las hojas de cálculo nos permiten para resolver un mismo problema. Podemos hacer como José Miguel y aplicar dos filtros consecutivos, o un solo filtro a la columna de control antes creada. Podemos incluso aplicar un filtro avanzado, que es algo que no hice en el video, pero que haré en un tutorial que estoy preparando.
Eliminar filas por condiciones con macros
Recuperamos en primer lugar una macro que ya he usado en varios problemas de este tipo y la adaptamos al caso que nos ocupa, pero suponiendo que hemos reducido el problema de las dos columnas a nuestra columna auxiliar de control. Este es el código:
Sub EliminaFilas() 'Seleccionamos la región de trabajo Dim i As Integer, nfilas As Integer nfilas = ActiveSheet.Cells(1, 1).CurrentRegion.Rows.Count 'Introducimos los datos de decisión qCol = InputBox("Columna del criterio") qCrit = InputBox("Criterio") 'Ejecutamos bucle y acción de borrado For i = nfilas To 2 Step -1 Cells(i, qCol).Select If Cells(i, qCol) = CDbl(qCrit) Then ActiveCell.EntireRow.Select Selection.Delete End If Next i End Sub
Otra solución alternativa con macros
Al reencontrarme con problemas viejos, siempre me gusta aprovechar esa ventaja de las hojas de cálculo, de Excel en particular, que es la flexibilidad, y aproximarme al problema de otra manera. Lo dejo en el código adjunto y esta vez teniendo en cuenta que se hará la comprobación en las columnas correspondientes a los índices 6 y 7, o sea la F y la G. Si las de tu caso particular son distintas, tienes que cambiar esos números.
Sub prueba1() Cells(1, 1).CurrentRegion.Select For Each Row In Selection.Rows If Row.Cells(6) = 0 Then If Row.Cells(7) = 0 Then Row.EntireRow.Select Selection.Delete End If End If Next Row End Sub
Buenos días,
gran aporte. Llevaba tiempo buscando la forma de borrar una serie de filas con una macro. He usado el segundo código, ya que lo entiendo mejor y me parece más eficiente, sin embargo tiene un pequeño problema.
Cada iteración finaliza avanzando a la siguiente fila, (Next Row), eso hace que si tienes dos filas seguidas en las que el criterio de selección valga cero (en mi caso son una diez filas seguidas con valor cero), no la detecte y haya que ejecutar la macro varias veces. ¿Se te ocurre alguna forma de hacer que se eliminen todas con una sola pasada?
Hola. Sí, en efecto. La segunda macro tiene ese problema. Creo recordar que me refiero a él en el video. Lo mejor sería no ir borrando una a una, sino ir construyendo un rango por unión de filas, para finalmente seleccionarlo todo y borrarlo de una vez. A ver si tengo tiempo uno de estos días y hago un video sintetizando todo lo visto sobre este tema de eliminación de filas por condiciones.
Buenos dias,
Tengo una base de datos, necesito eliminar todas las filas que en la columna L contenga EMPRESAS Y NEGOCIOS, alguien podria guiarme en que debo hacer?
Mil gracias
Voy a suponer que tiene la «base de datos» en una tabla de una hoja de Excel. Seleccione la columna L, con esa selección pulse Buscar y Reemplazar, en el cuadro de búsqueda flotante que aparece escriba «EMPRESAS Y NEGOCIOS» y pulse «Buscar todas». En la zona inferior editable de ese cuadro flotante de búsqueda, seleccione todas las ocurrencias arrastrando con el botón derecho del ratón pulsado. Eso le seleccionará todas las celdas sensibles de la columna L. Depués vaya al grupo de herramientas llamado «Celdas», pulse la flecha desplegable de la herramienta «Eliminar» y ahí la subherramienta «Eliminar Filas de Hoja». Eso le eliminará las filas relacionadas con esas celdas, que era lo que usted quería.
Saludos desde Madrid.
Buenos días,
Excelente su página y su aporte para la comunidad felicitaciones, podría ayudarme con un problema por favor. En un video que encontré en la web usted utiliza un código que permite eliminar valores duplicados de una base de datos según columnas criterio podría ayudarme por favor con ese código.. muchas gracias.. bryan.andrade@epn.edu.ec
https://www.youtube.com/watch?v=mTECVDBLNOQ