Macro para buscar un dato y eliminar la fila completa

Necesito buscar el valor de una celda en una tabla y cuando lo encuentre eliminar la fila completa.

Valor a buscar : hoja 1, celda C5

Tabla: hoja 2, celdas A6:O1048576

1 Respuesta

Respuesta
1

.13/10/16

Buenas noches, José

Aquí te comparto una rutina acabo de desarrollar que hace precisamente eso:

Accede al Editor de VBA (Atajo: Alt + F11), allí inserta un módulo (Insertar-Módulo) y pega el siguiente código:

Sub ElimLinea()
'---- Variables modificables:
'=== JOSE, modifica estos datos de acuerdo a tu proyecto:
HojaDato = "hoja 1"
Celdato = "C5"
HojaBusq = "hoja 2"
RangoBusq = "A6:O1048576"
txtParcial = True ' si fuera suficiente una coincidencia parcial coloca TRUE, sino FALSE
MayusMin = False ' Si importase cómo está escrito, coloca TRUE
'---- fin Variables
'
'---- inicio de rutina:
'  
Buscar = Sheets(HojaDato).Range(Celdato).Value
esta = False
txtParcial = IIf(txtParcial, xlPart, xlWhole)
Sheets(HojaBusq).Select
On Error Resume Next
Encontrado = ActiveSheet.Range(RangoBusq).Find(What:=Buscar, After:=[A6], LookIn:=xlFormulas, _
        LookAt:=txtParcial, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=MayusMin, SearchFormat:=False).Address
If Err.Number = 0 And Len(Encontrado) > 0 Then
    Range(Encontrado).EntireRow.Delete
    esta = True
End If
Err.Clear
On Error GoTo 0
    ElMensaje = IIf(esta = False, "NO SE ELIMINO LINEA ALGUNA", "Se eliminó la linea con el contenido " & Buscar)
    TipoMens = IIf(esta = False, vbCritical, vbInformation)
    ElTitulo = IIf(esta = False, "NO SE HIZO NADA", "LINEA ELIMINADA!")
    Application.ScreenUpdating = True
    MsgBox ElMensaje, TipoMens, ElTitulo
End Sub

Como verás, al principio del código coloqué las variables que habías indicado. Pero puedes reemplazarlas si las reales fuesen otras o quisieras usarlo en otro rango.

Faltó que dijeras si la coincidencia tiene que ser exacta o puede ser parcial y, además, si importa si está escrito en Mayúsculas o Minúsculas.

Por eso, dejé un par de variables más donde indicarle eso. Así como está, eliminará la fila si encuentra una coincidencia parcial (o total) sin importar cómo estuviera escrito.

.

Buenos días Fernando gracias por tu apoyo,

me envía el mensaje "se eliminó la línea con el contenido " , pero no se elimina. Los valores a buscar son numéricos.

.

Buenos días, José

Hay algo raro, si dio ese mensaje es que encontró al menos una celda con ese contenido y la eliminó.

Aquí te paso una variante de la rutina donde le indiqué que considerara el valor completo de la celda C5, simplemente cambiando txtParcial a False.

Pero además le agregué al mensaje la ubicación exacta de donde estaba el dato antes de eliminar la fila.

Entonces, en el módulo que hayas insertado reemplaza el procedimiento anterior por este:

Sub ElimLinea()
'---- Variables modificables:
'=== JOSE, modifica estos datos de acuerdo a tu proyecto:
HojaDato = "hoja 1"
Celdato = "C5"
HojaBusq = "hoja 2"
RangoBusq = "A6:O1048576"
txtParcial = False ' si fuera suficiente una coincidencia parcial coloca TRUE, sino FALSE
MayusMin = False ' Si importase cómo está escrito, coloca TRUE
'---- fin Variables
'
'---- inicio de rutina:
'  
Buscar = Sheets(HojaDato).Range(Celdato).Value
esta = False
txtParcial = IIf(txtParcial, xlPart, xlWhole)
Sheets(HojaBusq).Select
On Error Resume Next
Encontrado = ActiveSheet.Range(RangoBusq).Find(What:=Buscar, After:=[A6], LookIn:=xlFormulas, _
        LookAt:=txtParcial, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=MayusMin, SearchFormat:=False).Address
If Err.Number = 0 And Len(Encontrado) > 0 Then
    Range(Encontrado).EntireRow.Delete
    esta = True
End If
Err.Clear
On Error GoTo 0
    ElMensaje = IIf(esta = False, "NO SE ELIMINO LINEA ALGUNA", "Se eliminó la linea con el contenido " & Buscar & Chr(10) & "encontrado en la celda " & Encontrado)
    TipoMens = IIf(esta = False, vbCritical, vbInformation)
    ElTitulo = IIf(esta = False, "NO SE HIZO NADA", "LINEA ELIMINADA!")
    Application.ScreenUpdating = True
    MsgBox ElMensaje, TipoMens, ElTitulo
End Sub

Como siempre que comparto rutinas que eliminan líneas te recomiendo probarlas sobre una copia de la hoja original. Además te servirá para identificar visualmente lo que encontró y eliminó con el dato que da la nueva instrucción que le agregué.

Pruébalo y dime si anduvo.

Un abrazo

Fer

.

Muchas gracias estimado, no se que había pasado pero volví a copiar todo y ahora si me dio a la perfección gracias.

.

Ok, José

Tenía que andar, independientemente de que fuera número o texto.

Me alegro de que te haya ayudado.

Saludos

Fernando

Pd: "¿Util"?

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas