Excel macro borrar fila con un contenido en concreto

Necesito borrar filar que cumpla algún o algunos requisito. Por ejemplo borrar fila que contenga la palabra Domingo o domingo y lunes….

1 Respuesta

Respuesta
2

Si es posible, tanto con la herramienta Buscar y luego Eliminar o con macro.

Pero para ampliar mi respuesta necesito más información, en especial si lo quieres automatizar mediante programación.

- ¿Cómo le indicarás qué texto buscar? ¿En alguna celda o mediante un cuadro Inputbox?

- Debiera buscarlo en todas las filas y eliminar fila completa. Para esto tendrás que tener presente si la hoja tiene fórmulas que no se verán afectadas.

- ¿Cuándo mencionas 'domingo y lunes' ... es una cadena o son 2 textos diferentes que deben ser buscados?

Quedo atenta a tus aclaraciones. No olvides mencionar si la hoja estará protegida o no y si es posible que tenga autofiltros. Cuánta más información me dejes más rápido lo resolveremos. Y trata de subir una imagen con 2 o 3 filas de datos (cambialos a datos ficticios) donde se vean los encabezados.

- ¿Cómo le indicarás qué texto buscar? ¿En alguna celda o mediante un cuadro Inputbox?

MEDIANTE CUADTO

- Debiera buscarlo en todas las filas y eliminar fila completa. Para esto tendrás que tener presente si la hoja tiene fórmulas que no se verán afectadas.

EN UNA COLUMNA, ELIMINANDO LA FILA COMPLETA. NO HABRÁ FÓRMULA AFECTADA

- ¿Cuándo mencionas 'domingo y lunes' ... es una cadena o son 2 textos diferentes que deben ser buscados?

SON TEXTOS DIFERENTES

Quedo atenta a tus aclaraciones. No olvides mencionar si la hoja estará protegida o no y si es posible que tenga autofiltros.

ESTARÁ PROTEGIDA. 

Cuánta más información me dejes más rápido lo resolveremos. Y trata de subir una imagen con 2 o 3 filas de datos (cambialos a datos ficticios) donde se vean los encabezados.

PERDONA, NO SE COMO SE SUBE.

MUCHISIMA GRACIAS POR SU AYUDA.

Entra al Editor de macros, inserta un módulo y allí copia la macro que dejo a continuación. Lo que hará es buscar en col A el texto ingresado. Si lo encuentra te dirá en qué fila y solicita confirmación. En caso de 'si' se eliminará la fila completa. Debes ajustar la letra de la col a buscar y tu clave de hoja.

Sub eliminaFila()
'x Elsamatilde
dato = InputBox("Ingresa el texto a buscar en columna A")
If dato = "" Then Exit Sub    'si cancela la ventana no se ejecuta
'se busca el dato en col A    'ajustar al modelo
Set busco = ActiveSheet.Columns("A:A").Find(dato, LookIn:=xlValues, lookat:=xlPart)
If Not busco Is Nothing Then    'encontró el dato
    sino = MsgBox("¿Confirmas eliminar la fila 4?", vbQuestion + vbYesNo, "Confirmar")
    If sino = vbYes Then
        'desproteger- eliminar -volver a proteger
        ActiveSheet.Unprotect "tu_clave"
        Range("A" & busco.Row).EntireRow.Delete
        ActiveSheet.Protect "tu_clave"      'ajustar clave y opciones de protección
    End If
End If
End Sub

Pero faltaría aclarar  otros 2 detalles:

- Si no habrá otras tablas de datos que no deban ser involucradas. En caso de haberlas, hay que indicar el rango a recorrer, en lugar de indicar la columna completa.

- Si el dato se puede encontrar en varias filas. Y en ese caso, si debe eliminar todas las apariciones o no.

Para dejar una imagen, presiona el primer botón de la barra de herramientas de este espacio, opción SUBIR IMAGEN te permitirá buscar en tu equipo para insertarla.

 

Sdos!

- Si no habrá otras tablas de datos que no deban ser involucradas. En caso de haberlas, hay que indicar el rango a recorrer, en lugar de indicar la columna completa.

el dato a buscar esta en la columna B, que seria de la fila 14 a la 105

EL DATO A BUSCAR ESTA EN LA COMUNA B, QUE SERIA DE LA FILA 14 A LA 105

- Si el dato se puede encontrar en varias filas. Y en ese caso, si debe eliminar todas las apariciones o no.

DEBE BORRAR LA FILA COMPLETA

TAMBIEN SERIA INTERESANTE PODE PONER BOTONES PARA QUE SE EJECUTARA LA MACRO. "ELIMINAR DOMINGO"; "ELIMINAR LUNES"; "ELIMINAR...

COMO SIEMPRE MUY AGRADECIDO POR SU LABO

R.

No me gusta mucho la idea de tener 7 botones para los días.

Te sugiero otra opción: una celda con lista desplegable para seleccionar el día.

En el Editor, en el objeto HOJA de trabajo, copia lo siguiente, ajustando la celda del desplegable:

Private Sub Worksheet_Change(ByVal Target As Range)
'se controla el cambio en celda F11    'AJUSTAR la celda
On Error Resume Next
If Target.Address = "$F$11" And Target <> "" Then Call eliminaFila(Target)
End Sub

Y en un módulo la macro ajustada a la nueva situación:

Sub eliminaFila(dato)
'x Elsamatilde
Dim x As Integer
Dim sino, busco
sino = MsgBox("¿Confirmas eliminar las filas con texto '" & dato & "'?", vbQuestion + vbYesNo, "Confirmar")
If sino <> vbYes Then Exit Sub
'desproteger- eliminar -volver a proteger
ActiveSheet.Unprotect "tu_clave"
'se busca el dato en rango de col B
Set busco = Range("B14:B105").Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then    'encontró el dato
    x = busco.Row
    Do While x <= 105
        If Range("B" & x) = dato Then
            Range("B" & x).EntireRow.Delete xlUp
        Else
            x = x + 1
        End If
    Loop
End If
ActiveSheet.Protect "tu_clave"      'ajustar clave y opciones de protección
End Sub

Sdos  y no olvides marcar una votación para esta respuesta (buena o excelente).

Elsa

*Más ejemplos del evento Change en Hoja en video N° 46 de mi canal.

Ante todo, quiera mostrarte mis respeto y admiración, estas tratando con alguien que sabe muy poquito de excel, y no soy capaz de entender que es lo que tengo que hacer con la información que me das.

He sido capaz de hacer una lista desplegable con algunos días de la semana, los que necesito, pero no se que tengo que hacer con esto:

En el Editor, en el objeto HOJA de trabajo, copia lo siguiente, ajustando la celda del desplegable:

Private Sub Worksheet_Change(ByVal Target As Range)
'se controla el cambio en celda F11    'AJUSTAR la celda
On Error Resume Next
If Target.Address = "$F$11" And Target <> "" Then Call eliminaFila(Target)
End Sub

El modulo de la macro, supongo que solo sara pegarlo en Desarrollador en Visual Basic, si no es asi, ruego pasos a seguir.

De nuevo disculpa por la lata que le estoy dando, pero mis conocientos no llega a más.

Perdón por mi atrevimiento, pero seria posible que le enviara el excel y ud. me lo corrigiera.

Un cordial saludo,

Si, por favor. Porque es muy cansador explicar cuando hay que realizar varios pasos ;)

Cuando coloco mi correo aquí el corrector me lo cambia, pero lo intentaré, sino buscalos en sección CONTACTOS de mi sitio que dejo al pie.

Cibersoft PUNTO arg ARROBA gmail.com

No recibí aún tu correo, y viendo que nuevamente el corrector lo modificó te lo aclaro. El texto 'cibersoft. Arg' en minúsculas, luego el arroba y luego el texto 'gmail.com'

Si, en cambio, ya pudiste adaptar los códigos a tu libro agradeceré lo comentes y cierres la consulta.

Sdos!

Hola, se lo he enviado a través de email.

GRACIAS

No se si la versión del office es importate, la mía es la del 2016

Si, es correcta la versión. Ahora el libro tiene extensión xlsm considerando que tiene macros. Ajusté algo la del módulo considerando la muestra real:

Sub eliminaFila(dato)   'macro para ser ejecutada desde cualquier hoja
'x Elsamatilde
Dim x As Integer, y As Integer
Dim sino, busco
sino = MsgBox("¿Confirmas eliminar las filas con texto '" & dato & "'?", vbQuestion + vbYesNo, "Confirmar")
If sino <> vbYes Then Exit Sub
'desproteger- eliminar -volver a proteger
'se busca el dato en rango de col B hasta la última fila ocupada
y = Range("B" & Rows.Count).End(xlUp).Row
Set busco = Range("B14:B" & y).Find(dato, LookIn:=xlValues, lookat:=xlWhole)
If Not busco Is Nothing Then    'encontró el dato
    ActiveSheet.Unprotect "tu_clave"
    x = busco.Row
    Do While x <= y
        If Range("B" & x) = dato Then
            Range("B" & x).EntireRow.Delete xlUp
        Else
            x = x + 1
        End If
    Loop
    ActiveSheet.Protect "tu_clave", DrawingObjects:=True, Contents:=True, Scenarios:=True
     'ajustar clave y opciones de protección
End If
End Sub

Sdos!

Hola de nuevo, MUY AGRADECIDO.

FUNCIONA PERFECTAMENTE

Cuánto me costaría hacer una hoja de cálculo como le he mandado, con la siguiente modificación.

primero: que le pudiera poner para que saliera de forma automática de fecha a fecha de cualquier año y de cualquier cantidad, como la hoja enviada por ejemplo de 1 de enero al  31 de marzo de 20xx

segundo. Que la cantidad a repartir, además de aleatoria y que.no se repita, pudiera ponderarla dependiendo del día de la semana, dándole una numero por ejemplo de 1 al 9 siendo el 9 el día de reparto más alto y que las cantidades repartidas sean equivalentes es decir, que en el reparto de lunes no salga 10 y el viernes 5000, que sean cantidades homogéneas. Lunes 10 y viernes 40 dependiendo de la ponderación dada.

De nuevo muchas gracias.

lógicamente la valoración será EXCELENTE, no puede ser menos.

Como se quita lo de proteger la hoja cada vez que se elimina un día. Gracias.

Entre tus aclaraciones comentabas: ESTARÁ PROTEGIDA.

Por eso la macro desprotege la hoja para poder eliminar la fila y luego la vuelve a proteger.

Si la hoja NO estará protegida debes inhabilitar (colocando una comilla delante) o directamente borrar las instrucciones que mencionan: ActiveSheet. Unprotect y ActiveSheet. Protect.

O puedes protegerla tildando la opción 'Eliminar filas' ... y en ese caso si bien tu hoja estará protegida en general, te permitirá eliminar filas, tanto éstas de la macro como cualquier otra. Y tampoco, en este caso', necesitas esas 2 instrucciones.

Con respecto a tu consulta de realizar otra hoja de cálculo, te comento:

- Este sitio es gratuito para todos (ni se cobra ni se abonan las consultas)

- Debes iniciar una nueva consulta (luego de finalizada ésta), con todas las aclaraciones (referencias de hojas y ubicación de los datos), si es posible con imagenes de lo que tienes y lo que quieres obtener.

- Si deseas asistencia privada para evitar el paso anterior y la consabida demora (con la consulta actual ya llevamos 1 semana ;) puedes enviarme la solicituda a mi correo.

- También los usuarios pueden crear una consulta (y de hecho muchas veces lo han hecho) solicitando algún experto para realizar algún trabajo privado y de pago.

Sdos.!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas