Attribute VB_Name = "EliminarFilas" ' Gerencie.com - Macros para eliminar filas que cumplan una condición. ' Importar en el editor de VBA (Alt + F11): Archivo > Importar archivo. ' Trabaje sobre una copia del libro: las filas eliminadas con macros no se recuperan con Ctrl + Z. ' Configure en cada macro la hoja, la columna, la fila del encabezado y los criterios. Const HOJA As String = "Datos" Const COLUMNA As String = "C" Const FILA_ENCABEZADO As Long = 4 ' 1. Eliminar las filas cuya celda sea igual a alguno de los criterios (sin distinguir mayúsculas) Sub EliminarFilasIguales() Dim ws As Worksheet, i As Long, u As Long, n As Long, criterios As Variant, c As Variant criterios = Array("ave", "arroz") ' uno o varios criterios Set ws = ThisWorkbook.Worksheets(HOJA) u = ws.Cells(ws.Rows.Count, COLUMNA).End(xlUp).Row Application.ScreenUpdating = False For i = u To FILA_ENCABEZADO + 1 Step -1 ' de abajo hacia arriba For Each c In criterios If LCase(Trim(ws.Cells(i, COLUMNA).Text)) = LCase(c) Then ws.Rows(i).Delete: n = n + 1: Exit For End If Next c Next i Application.ScreenUpdating = True MsgBox n & " filas eliminadas.", vbInformation End Sub ' 2. Eliminar las filas cuya celda contenga un texto en cualquier parte Sub EliminarFilasQueContienen() Dim ws As Worksheet, i As Long, u As Long, n As Long, texto As String texto = InputBox("Texto que deben contener las filas a eliminar (columna " & COLUMNA & "):") If texto = "" Then Exit Sub Set ws = ThisWorkbook.Worksheets(HOJA) u = ws.Cells(ws.Rows.Count, COLUMNA).End(xlUp).Row Application.ScreenUpdating = False For i = u To FILA_ENCABEZADO + 1 Step -1 If InStr(1, ws.Cells(i, COLUMNA).Text, texto, vbTextCompare) > 0 Then ws.Rows(i).Delete: n = n + 1 End If Next i Application.ScreenUpdating = True MsgBox n & " filas eliminadas.", vbInformation End Sub ' 3. Conservar solo las filas iguales a un valor y eliminar todas las demás Sub EliminarFilasDistintas() Dim ws As Worksheet, i As Long, u As Long, n As Long, valor As String valor = InputBox("Valor que desea conservar (columna " & COLUMNA & "):") If valor = "" Then Exit Sub Set ws = ThisWorkbook.Worksheets(HOJA) u = ws.Cells(ws.Rows.Count, COLUMNA).End(xlUp).Row Application.ScreenUpdating = False For i = u To FILA_ENCABEZADO + 1 Step -1 If LCase(Trim(ws.Cells(i, COLUMNA).Text)) <> LCase(valor) Then ws.Rows(i).Delete: n = n + 1 End If Next i Application.ScreenUpdating = True MsgBox n & " filas eliminadas.", vbInformation End Sub ' 4. Eliminar las filas cuyo valor numérico (columna E) sea menor que un límite Sub EliminarFilasMenoresQue() Dim ws As Worksheet, i As Long, u As Long, n As Long, limite As Double limite = 100000 Set ws = ThisWorkbook.Worksheets(HOJA) u = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row Application.ScreenUpdating = False For i = u To FILA_ENCABEZADO + 1 Step -1 If IsNumeric(ws.Cells(i, "E").Value) And ws.Cells(i, "E").Value <> "" Then If ws.Cells(i, "E").Value < limite Then ws.Rows(i).Delete: n = n + 1 End If Next i Application.ScreenUpdating = True MsgBox n & " filas eliminadas.", vbInformation End Sub ' 5. Eliminar las filas completamente vacías dentro de los datos Sub EliminarFilasVacias() Dim ws As Worksheet, i As Long, u As Long, n As Long Set ws = ThisWorkbook.Worksheets(HOJA) u = ws.UsedRange.Row + ws.UsedRange.Rows.Count - 1 Application.ScreenUpdating = False For i = u To FILA_ENCABEZADO + 1 Step -1 If Application.WorksheetFunction.CountA(ws.Rows(i)) = 0 Then ws.Rows(i).Delete: n = n + 1 Next i Application.ScreenUpdating = True MsgBox n & " filas eliminadas.", vbInformation End Sub