Material registrado:

    Safe Creative #1709190281730

    Cajón de sastre:

    Eliminar filas según contenidos en columna

    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.

    Formato condicional en Excel
    Con una columna de control auxiliar es fácil transformar las dos condiciones en una. Las resaltamos con formato condicional y las buscamos con CTRL+B

    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:

    Subrutina para eliminar filas por condiciones
     
    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.

    Variante
     
    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

    Comments

    This post currently has 9 responses

    • 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.

      • Ejecuta la macro con estos cambios y cuando te salte el inputbox pidiendote el criterio, pon 2
        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

      • Sub Eliminar_Filas()
        Sheets(«Errores»).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 = «OFI-DET» ‘
        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

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Sidebar



    "

    Si continuas utilizando este sitio, significa que aceptas el uso de cookies. más información

    Los ajustes de cookies de esta web están configurados para "permitir cookies" y así ofrecerte la mejor experiencia de navegación posible. Si sigues utilizando esta web sin cambiar tus ajustes de cookies o haces clic en "Aceptar" estarás dando tu consentimiento a esto.

    Cerrar