Material registrado:

    Safe Creative #1709190281730

    Cajón de sastre:

    Todo lo que yo sé sobre eliminar filas por condiciones en Excel

    Eliminar filas por condiciones en bases de datos

    Una tarea frecuente en Excel es la de eliminar ciertas filas (registros en terminología de bases de datos) de una tabla, de acuerdo a que en alguna columna (campo) de esa fila se cumpla determinada condición. Por ejemplo, tenemos esta tabla en una hoja de Excel llamada “HojaControl”:

    CargosCifraMaterialesFecha
    Capitán50Papel14/05/2019
    Jefe62Cartón12/05/2019
    Comandante100Metal14/04/2019
    Controlador93Papel08/05/2019
    Director67Piedra06/05/2019
    Empleador15Vidrio04/05/2019
    Gobernador37Papel02/05/2019
    Gestor43Agua24/04/2019
    Señor84Aire28/04/2019

    Y queremos eliminar las filas en cuya columina “Materiales” ponga “Papel”  para obtener el siguiente resultado:

    CargosCifraMaterialesFecha
    Jefe62Cartón12/05/2019
    Comandante100Metal14/04/2019
    Director67Piedra06/05/2019
    Empleador15Vidrio04/05/2019
    Gestor43Agua24/04/2019
    Señor84Aire28/04/2019

    Esta tarea, así en general, se puede enfocar de muchas maneras en Excel. Pero antes de pasar a describirlas, será bueno imaginarnos que la tabla inicial es una base de datos con todas las de la ley que se va a llamar “BASECONTROL”. Digamos que la hemos creado como tal con el software apropiado y una simple sentencia de SQL que tendría este aspecto:

    CREATE DATABASE IF NOT EXISTS BASECONTROL;

    Dentro de esa base de datos hemos creado una tabla llamada como la hoja de Excel, es decir “HojaControl”, y lo hemos hecho así:

    CREATE TABLE IF NOT EXISTS HojaControl

    (

    id INT,

    Cargos TEXT,

    Cifra INT,

    Materiales TEXT,

    Fecha DATE,

    ) ;

    Hemos añadido el campo id, que sería el destinado a alojar la clave primaria y que podría representarse en Excel por el número de fila. En nuestro gestor de bases de datos teclearíamos:

    ALTER TABLE HojaControl

    ADD PRIMARY KEY (id);

    Y una vez preparada la estructura de la base de datos, con su tabla, introduciríamos los datos que contiene. Y lo haríamos más o menos así:

    INSERT INTO HojaControl VALUES

    (

    1, “Capitán”, 50, “Papel”, #14/05/2019#

    );
    INSERT INTO HojaControl VALUES

    (

    2, “Jefe”, 62, “Cartón”, #12/05/2019#

    );

    … Y así hasta completar todos los registros.

    Una vez hecho esto, la tarea de conseguir una sub-tabla en la cual no estuvieran incluidos los registros en cuyo campo “Materiales” diga “Papel”, es tremendamente sencilla en SQL. Bastaría con efectuar la siguiente consulta filtrada a la base de datos:

    SELECT * FROM HojaControl WHERE Materiales != “Papel”

    Eliminar filas por condiciones en Excel

    Hay varias posibilidades para realizar esta tarea en una tabla de Excel. En el video que acompaña a este artículo, yo las he analizado según dos grandes capítulos: sin macros y con macros.

    Si trabajamos sin macros tenemos dos opciones:

    1. Usar la búsqueda (CTRL+B en español, CTRL+F en inglés) del valor del criterio “Papel” en el rango preseleccionado de la columna “Materiales”, hacer click en la opción “Buscar todas”, seguida de la selección en el cuadro inferior, y luego en las herramientas de celdas elegimos “Eliminar” y después “Eliminar filas de hoja”.
    2. Usar el autofiltro o el filtro avanzado para obtener una lista reducida adaptada a nuestras condiciones.

    Si trabajamos con macros las opciones son todas las que la imaginación permita. En el video yo analizo tres de ellas, pero hay que tener en cuenta que son en realidad dos formas de trabajar:

    1. Recorrer la columna del criterio buscando “Papel” y donde lo encontremos, seleccionar la fila y eliminarla. Esto significa que tenemos que trabajar desde la última fila volviento hasta la primera, pues de lo contrario se nos quedarán filas sin eliminar donde haya dos seguidas que digan “Papel”. Este trabajo lo haría la primera de las siguientes macros, la que se llama EliminarFilas1. La segunda de las macros cuyo código adjunto aquí, EliminarFilas2, trabaja con la colección de filas de un rango, y por tanto es también sensible a este error. Cuando aparezcan dos filas seguidas que cumplan el criterio, se saltará la segunda.
    2. Hacer lo mismo pero en lugar de ir eliminando cada correspondencia que encontremos, lo que hacemos es irla añadiendo a un rango creciente que eliminamos al final de todo. Esto evita el problema anterior. Esto lo hacemos con EliminarFilas3.

    Estas son las tres macros:

    Sub EliminaFilas1()
    'Seleccionamos la región de trabajo
    Dim i As Integer, nfilas As Integer, qCol As Integer, qCrit As String
    nfilas = ActiveSheet.Cells(1, 1).CurrentRegion.Rows.Count
    'Introducimos los datos de decisión
    qCol = CInt(InputBox("Columna del criterio"))
    qCrit = InputBox("Criterio")
    'Ejecutamos bucle y acción de borrado
    For i = nfilas To 2 Step -1 '¡ Pero tiene que ser hacia atrás !
    Cells(i, qCol).Select
    If Cells(i, qCol) = qCrit Then
    ActiveCell.EntireRow.Select
    Selection.Delete
    End If
    Next i
    End Sub
    '---------------------------------------------------------------------------------------------
    Sub EliminaFilas2()
    ' Si lo dejamos en Cells(1,1).CurrentRegion.Select da errores
    Dim queRango As Range, nFilas As Long
    nFilas = Cells(1, 1).CurrentRegion.Rows.Count
    'Evito actuar accidentalmente sobre la fila de títulos
    ' Si lo dejamos en Cells(1,1).CurrentRegion.Select da errores
    Set queRango = Cells(1, 1).CurrentRegion.Resize(nFilas - 1, 7).Offset(1, 0)
    'queRango.Select
    For Each Row In queRango.Rows
    'Cambiar las columnas 6 y 7 por las que correspondan
    If Row.Cells(6) = 0 Then
    'Cambiar la condición del valor 0 por la que corresponda
    If Row.Cells(7) = 0 Then
    Row.EntireRow.Select
    Selection.Delete
    'ERROR: Si hay dos filas seguidas, se saltará la segunda al hacer Next Row
    End If
    End If
    Next Row
    End Sub
    '---------------------------------------------------------------------------------------------
    Sub EliminaFilas3()
    'Construimos un rango acumulativo basado en que se cumpla la condición en fila
    'Seleccionamos la región de trabajo
    Dim i As Integer, nfilas As Integer, qCol As Integer, qCrit As String
    nfilas = ActiveSheet.Cells(1, 1).CurrentRegion.Rows.Count
    'Introducimos los datos de decisión
    qCol = CInt(InputBox("Columna del criterio"))
    qCrit = InputBox("Criterio")

    'Construcción del rango acumulativo
    Dim queRangoBorrar As Range
    'Inicialización forzada del rango
    Set queRangoBorrar = Cells(nfilas + 1, qCol).Rows.EntireRow
    For i = 1 To nfilas
    If Cells(i, qCol) = qCrit Then
    Set queRangoBorrar = Union(queRangoBorrar, Cells(i, qCol).EntireRow
    End If
    Next i
    queRangoBorrar.Select
    Selection.Delete
    End Sub
    '---------------------------------------------------------------------------------------------

    Y finalmente aquí les adjunto un videotutorial sobre el tema.

     

    Comments

    This post currently has one response

    • Sub BorrarFilasX()
      ‘Suponemos tabla completa desde esquina celda A1
      ‘Borramos las filas en cuya primera columna haya una «X»
      ‘Adaptado de un código de la página de microsoft
      TotalFilas = Cells(1).CurrentRegion.Rows.Count
      Cells(1).Offset(0, 0).Select
      For i = 1 To TotalFilas
      If ActiveCell.Value = «X» Then
      Selection.EntireRow.Delete
      Else
      ActiveCell.Offset(1, 0).Select
      End If
      Next i
      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