¿Cómo eliminar filas con macro según contenido?

Espero se encuentre bien.

Por favor apóyeme con lo siguiente: Tengo un listado dinámico (col. A, con miles de filas normalmente) del cual necesito eliminar las filas, cuyas celdas en la col. A, "NO" contengan al menos 2 palabras (de un total de 3-4 habitualmente) localizadas en otra celda ("celda origen" que es cambiante) de otra hoja (que es constante) del mismo libro y que se especificaría al inicio de la macro seleccionándola mediante un inputbox type 8, quedando finalmente un listado sólo con las celdas que contienen al menos 2 de las 3 ó 4 palabras del inputbox (="celda origen"). Todos los textos son cambiantes de un caso a otro (los de "celda origen" y los del listado dinámico). No utilizo el filtro porque debo hacer esta actividad muchas veces al día (casi centenares...), me parece que una macro con un botón me ahorraría tiempo significativo y aportaría mayor precisión.

Ejemplo:

1) Inicialmente se tiene:

Celda Origen (palabras a buscar):

Listado (coloqué en amarillo las celdas relevantes solo para visualizar más fácilmente en este ejemplo, en un caso real no estarían resaltadas):

2) Macro: se ejecuta la macro iniciando con la selección de la celda origen mediante inputbox.

3) Resultado:

Listado depurado:

Respuesta
1

1 respuesta más de otro experto

Respuesta
1

Te anexo la macro

Sub Eliminar_Filas()
'Por.Dante Amor
    Set h1 = Sheets("listado")  'hoja con el listado
    '
    On Error Resume Next
    With Application
        Set celda = .InputBox("Selecciona celda origen ", "PALABRAS", _
            Default:=Selection.Address, Type:=8)
        If celda Is Nothing Then Exit Sub
    End With
    On Error GoTo 0
    '
    datos = Split(celda.Value, " ")
    For i = h1.Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
        cont = 0
        For j = LBound(datos) To UBound(datos)
            If InStr(1, LCase(h1.Cells(i, "A")), LCase(datos(j))) > 0 Then
                cont = cont + 1
            End If
        Next
        If cont < 2 Then h1.Rows(i).Delete
    Next
    MsgBox "Fin"
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

En esta línea de la macro tienes que poner el nombre de tu hoja

   Set h1 = Sheets("listado")  'hoja con el listado

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas